- MS4110 is an example of an oil debris monitoring system
- OODM cannot predict failure
- Only gives data on wear particle generation rate
- Correlating wear particle generation to failure is system-specific
- Metalscan system can isolate ferrous and non-ferrous
- Chipcheck system can also identify alloys of the metal using spectroscopy
- M50 is bearing grade steel
- If detected, don't use the machine
- Silver is used as coatings for the bearings
- Silver in oil indicates superficial damage
- Ferrous particles are detected using eddy current
- Nonferrous particles are detected using permeability-based detection
- Usually, opposite phase signals are obtained for ferrous and non-ferrous
- The only parameter on the sensor is the phase angle
- The interquartile demodulation technique is used to detect the chips.
- Data communication is through Modbus or TCP protocol
Happiness
Sunday, December 29, 2024
Oil debris monitoring system notes
Saturday, December 21, 2024
Things he did last week
- 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.
- Went to udupi to celebrate priya getting regularised in Mistral after probation period in November end.
- Priya gave cake , chocolate cake , with congratulations Dr Balaji on Dec 3rd.
- Dec 21, he told "Appa should not sleep near me".
Sunday, November 24, 2024
Things he did last week
- 2024 Novemeber last week
- Asked first time a question regarding languages.. What is house in hindhi? Ghar.
- 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"
- Took my hand for cracking. Till date he hates me cracking his knuckles.
- 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.
- 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.
- 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');
Sunday, October 6, 2024
Friday, September 6, 2024
Sulzer Frank Gas turbine controls notes
Saw video on 10-Aug-2024
- 1939 ABB Switzerland - 4MW gas turbine had 17.4% efficiency
- Installed by Prof Stodola
- ran till 2002
- acquired by Alstom in 2005
- V94.2 Industrial grade gas turbine with silo type combustor
- bearings: Siemens bearings of gas turbines are sealed
- Alstom bearings are accessible during operation
- Combustion can be diffusion flame or premixed flame.
- diffusion : only outer perphery of yellow flame touches oxygen. inside CH4 is unburnt.
- Premixed: CH4+O2 already thoroughly mixed, blue flame
- VIGV = to vary the air mass flow rate to control
- EGT: not enter unstable combustion zone.
- sero actuator valves pid are tuned to have one overshoot and no undershoots, used in the fuel supply lines.
- TUning of pid controllers are done at 50% open position
- in case control signal to the control valve is interrupted like cable cut, the spring loaded valve must close the line in 200 ms
- double side block and bleed are required before opening fuel gas pipelines for repair
- lvms: vibration diagonostics for insity balancing of turbines
- temperature should drop when bleed valve closes
- startup burner is diffusion burner
- run up premixed burner
- power producing turbines are of 3 manufacturers
- ge= frame 9
- siemens = v94.2
- alstom =13e2
- 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/"