%% LiveLink Simulationsmodell für Wiederstandsberechung clear all close all clc; % Start der Zeitmessung tic %% Parametereingabe n_max = 10; % Maximale Anzahl der Schweißpunkte / MaximalTemp Werte vorhanden für 1,3,5,10,20,40 n_genau = (1:2:40); % zum ableich der der gemessenen Temperatur [1 3 5 10 20 40]; Mesh_quali = 3; % Mesh Einstellung: 9 = extrem Grob, 8 = extra Grob, 7 = Gröber, 6 = Grob, 5 = Normal, 4 = Fein, 3 = Feiner, 2 = extra Fein, 1 = extrem Fein Qpunkt = [1.48e+8]; %[W/m^2] % Was soll ich als Durchschnittsleistung für Qpunkt abgeben %% Schleife für die Anzahl der Schweißpunkte for j = 1:length(n_genau) for k = 1:length(Qpunkt) %% Kries Plot/Funktion für die Schweißpunktpositionen % Parametereingabe n = n_genau(j); radius = 2.5; %Radius der Schweißnaht xmitte = 0; %x Mittelpunkt der Schweißnaht ymitte = 0; %y Mittelpunkt der Schweißnaht % Berechnung phi=0:360/n:359; % Aufteilung der 360° auf N Punkte phi = phi./180.*pi; % Umrechnung in rad [xtmp,ytmp] = pol2cart(phi,radius); % Erstellen des Kreises x=(xtmp+xmitte)'; % x Positionsvektor der Schweißpunkte y=(ytmp+ymitte)'; % y Positionsvektor der Schweißpunkte z = -0.1; % z Position der Schweißpunkte %plot(x,y,'o') % Plot der Schweißpunktpositionen %% Comsol-Modell import com.comsol.model.* import com.comsol.model.util.* % Erstelle ein Comsol-Modell mit dem Tag 'model' Erstelle Komponente comp1 % des Modells model = ModelUtil.create('Model'); model.modelNode.create('comp1'); %% Global Variable erstellen % Hier werden die ein und ausschalt vorgänge des Lasers mittels rechtenkfunktion festgelegt for i=1:n num_rect = num2str(i); rect = strcat('rect',num_rect); lower = (i*0.02); % 0.02s ist die Zeit bis zum beginn des nächsten Schweißvorgangs upper = lower + 0.01; % 0.01 ist die dauer des Schweißspulses lower_str = num2str(lower); upper_str = num2str(upper); model.func.create(rect, 'Rectangle'); model.func(rect).set('lower', lower_str); model.func(rect).set('upper', upper_str); model.func(rect).set('smooth', '0.0025'); end % Simulationszeit der Instationären Simulation Total_time = num2str(0.02+0.02*n+0.1); % Begin Simzeit = 0.02s Wärmeeintrag 0.2*ns Abkühlzeit 0.1s Sim_range = strcat('range(0,0.01,',Total_time ,')'); %% Geometrie % In diesem Abschnitt werden alle zur Komponente comp1 zugehörigen % Geometrien erstellt. model.geom.create('geom1', 3); model.geom('geom1').lengthUnit('mm'); disp('Erzeugen der Geometrie...'); ModelUtil.showProgress(true); % Progress Bar % Erstellen Zelle model.geom('geom1').feature.create('wp1', 'WorkPlane'); model.geom('geom1').feature('wp1').geom.feature.create('b1', 'BezierPolygon'); model.geom('geom1').feature('wp1').geom.feature.create('fil1', 'Fillet'); model.geom('geom1').feature('wp1').geom.feature.create('fil2', 'Fillet'); model.geom('geom1').feature('wp1').set('quickplane', 'zx'); model.geom('geom1').feature('wp1').set('unite', 'on'); model.geom('geom1').feature('wp1').geom.feature('b1').set('p', {'0' '0' '-15.0' '-15.0' '-0.2' '-0.2' '0'; '0' '-13.075' '-13.075' '-12.875' '-12.875' '0' '0'}); model.geom('geom1').feature('wp1').geom.feature('b1').set('w', {'1' '1' '1' '1' '1' '1' '1' '1' '1' '1' '1' '1'}); model.geom('geom1').feature('wp1').geom.feature('b1').set('degree', {'1' '1' '1' '1' '1' '1'}); model.geom('geom1').feature('wp1').geom.feature('fil1').set('radius', '0.9'); % Innenradius der Zelle model.geom('geom1').feature('wp1').geom.feature('fil1').selection('point').set('b1(1)', [3]); model.geom('geom1').feature('wp1').geom.feature('fil2').set('radius', '1.1'); % Außenradius der Zelle model.geom('geom1').feature('wp1').geom.feature('fil2').selection('point').set('fil1(1)', [6]); model.geom('geom1').feature.create('rev1', 'Revolve'); model.geom('geom1').feature('rev1').set('axis', {'1' '0'}); model.geom('geom1').feature('rev1').selection('input').set({'wp1'}); % Erstellen Ableiter model.geom('geom1').feature.create('wp2', 'WorkPlane'); model.geom('geom1').feature('wp2').geom.feature.create('r1', 'Rectangle'); model.geom('geom1').feature('wp2').set('unite', 'on'); model.geom('geom1').feature('wp2').geom.feature('r1').set('size', {'20' '11'}); model.geom('geom1').feature('wp2').geom.feature('r1').set('pos', {'-5.702' '-5.5'}); model.geom('geom1').feature('wp2').geom.feature.create('cha1', 'Chamfer'); model.geom('geom1').feature('wp2').geom.feature('cha1').set('dist', '2.474873'); model.geom('geom1').feature('wp2').geom.feature('cha1').selection('point').set('r1(1)', [1 4]); model.geom('geom1').feature.create('ext1', 'Extrude'); model.geom('geom1').feature('ext1').setIndex('distance', '0.2', 0); % Dicke des Ableiters model.geom('geom1').feature('ext1').selection('input').set({'wp2'}); % Erstellen der Schweißpunkte for i = 1:n num = num2str(i); s=strcat('cyl',num); x_now = x(i); y_now = y(i); model.geom('geom1').feature.create(s, 'Cylinder'); model.geom('geom1').feature(s).set('r', '0.1'); % Schweißpunkt Radius model.geom('geom1').feature(s).set('h', '0.3'); % Schweißpunkt höhe model.geom('geom1').feature(s).setIndex('pos', x_now, 0); % x pos (Note: 0=x, 1=y, 2=z) model.geom('geom1').feature(s).setIndex('pos', y_now, 1); % y pos model.geom('geom1').feature(s).setIndex('pos', z, 2); % z pos end % Erstellen des Messzylinders model.geom('geom1').feature.create('cylmess', 'Cylinder'); model.geom('geom1').feature('cylmess').set('r', '0.56'); model.geom('geom1').feature('cylmess').set('h', '0.1'); model.geom('geom1').feature('cylmess').setIndex('pos', '0', 0); % x pos (Note: 0=x, 1=y, 2=z) model.geom('geom1').feature('cylmess').setIndex('pos', '0', 1); % y pos model.geom('geom1').feature('cylmess').setIndex('pos', '-0.2', 2); % z pos % Alle Geometrieobjekte werden erzeugt. model.geom('geom1').run; %mphgeom(model); % Darstellung der Geometrie in einem MATLAB Figure %% Physik % In diesem Abschnitt werden die physikalitschen Randbedingunen an die % Geometrieobjekte angelegt. Füge Physikobjekt 'ConductiveMedia' zu % Geometrie geom1 hinzu. model.physics.create('ht', 'HeatTransfer', 'geom1'); model.physics('ht').feature('init1').set('T', 1, '294.150[K]'); % Raumtemperatur der Halle % Erstellen der fixen Temperatur Randbedingung am Ableiter (Erdung) coord_ground_box = [15 13; 10 -10 ; -1 1]; ground_rb = mphselectbox(model,'geom1',coord_ground_box, 'boundary'); model.physics('ht').feature.create('temp1', 'TemperatureBoundary', 2); model.physics('ht').feature('temp1').set('T0', '294.15[K]'); % Raumtemperatur der Halle model.physics('ht').feature('temp1').selection.set(ground_rb); % Erstellen der fixen Temperatur Randbedingung am Anschluss (der Zelle) coord_ground_box = [14 -14; 14 -14 ; -12 -17 ]; anschluss_rb = mphselectbox(model,'geom1',coord_ground_box, 'boundary'); model.physics('ht').feature.create('temp2', 'TemperatureBoundary', 2); model.physics('ht').feature('temp2').set('T0', '294.15[K]'); % Raumtemperatur der Halle 21 grad model.physics('ht').feature('temp2').selection.set(anschluss_rb); %Wärmequelle for i = 1:n num2 = num2str(i); bhs=strcat('bhs',num2); x_now = x(i); y_now = y(i); x_now_plus = x_now+0.15; x_now_minus = x_now-0.15; y_now_plus = y_now+0.15; y_now_minus = y_now-0.15; coord_laser_box = [x_now_plus x_now_minus; y_now_plus y_now_minus; 0.3 0.1]; rb_laser = mphselectbox(model,'geom1',coord_laser_box, 'boundary'); Qpunkt_String = num2str(Qpunkt); num_rect = num2str(i); Qpunkt_i = strcat(Qpunkt_String,'*rect',num_rect,'(t)'); model.physics('ht').feature.create(bhs, 'BoundaryHeatSource', 2); model.physics('ht').feature(bhs).selection.set(rb_laser); model.physics('ht').feature(bhs).set('Qb', 1, Qpunkt_i); end %% Studie % Erstellen eine Studie zur Durchführung der Simulation. model.study.create('std1'); model.study('std1').feature.create('time', 'Transient'); model.study('std1').feature('time').set('tlist', Sim_range); model.study('std1').feature('time').activate('ht', true); %% Material % Hilumin mit Annahmen model.material.create('mat1'); model.material('mat1').name('Copper'); model.material('mat1').set('family', 'copper'); model.material('mat1').propertyGroup('def').set('relpermeability', '1'); model.material('mat1').propertyGroup('def').set('electricconductivity', '9.93e6[S/m]'); %Hilumin model.material('mat1').propertyGroup('def').set('thermalexpansioncoefficient', '12.3e-6[1/K]'); %Hilumin model.material('mat1').propertyGroup('def').set('heatcapacity', '452[J/(kg*K)]'); %Nickel model.material('mat1').propertyGroup('def').set('relpermittivity', '1'); model.material('mat1').propertyGroup('def').set('density', '7870[kg/m^3]'); %Hilumin model.material('mat1').propertyGroup('def').set('thermalconductivity', '52[W/(m*K)]'); %Hilumin model.material('mat1').propertyGroup.create('Enu', ['Elastizit' native2unicode(hex2dec({'00' 'e4'}), 'unicode') 'tsmodul und Poissonzahl']); model.material('mat1').propertyGroup('Enu').set('poissonsratio', '0.31'); %Nickel (http://www.engineeringtoolbox.com/metals-poissons-ratio-d_1268.html) model.material('mat1').propertyGroup('Enu').set('youngsmodulus', '210e9[Pa]'); %Hilumin model.material('mat1').propertyGroup.create('linzRes', 'Linearized resistivity'); model.material('mat1').propertyGroup('linzRes').set('alpha', '0.0064[1/K]'); %Copper = 0.0039[1/K], Annahme Hilumin = 0.0064 [1/K] (Müller) model.material('mat1').propertyGroup('linzRes').set('rho0', '1.0e-7[ohm*m]'); %Copper = 1.72e-8[ohm*m], Hilumin= 1.0e-7[ohm*m] (Müller) model.material('mat1').propertyGroup('linzRes').set('Tref', '273.15[K]'); %Referenz Temperatur model.material('mat1').set('family', 'copper'); %% Mesh Erstellen model.mesh.create('mesh1', 'geom1'); model.mesh('mesh1').autoMeshSize(Mesh_quali); % Mesh auflösung mit 'Mesh_quali' model.mesh('mesh1').run; % mphmesh(model); % Darstellung des Meshes in einem MATLAB Figure %% Solver % Solvereinstellungen werden im folgenden Abschnitt definiert (default). % model.sol.create('sol1'); % model.sol('sol1').study('std1'); % %model.sol('sol1').feature.create('t1', 'Time'); % model.sol('sol1').run; %% Datenexport % Koordinaten, elektrisches Potential und normierte Stromdichte der % Knotenpunkte werden in eine Text-Datei exportiert. % Selection für die Datenausgabe coord_daten_box = [0.3 -0.3; 0.3 -0.3 ; -0.25 -0.11]; daten_rb = mphselectbox(model,'geom1', coord_daten_box, 'boundary'); name_n = num2str(n); NameData = strcat('Temp_Mittelwert_n',name_n,'.txt'); % model.result.numerical('av1').selection.set(daten_rb); % model.result.numerical('av1').set('table', 'tbl1'); % model.result.numerical('av1').setResult; % model.result.table.create('tbl1', 'Table'); % model.result.table('tbl1').comments(['Oberfl' native2unicode(hex2dec({'00' 'e4'}), 'unicode') 'chenmittelwert 1 (T2)']); % model.result.export.create('tbl1', 'Table'); % model.result.export('tbl1').set('filename', NameData); % model.result.export('tbl1').run; % %% Modell speichern Sol_name2 = strcat('Sol_Instationaer_uhrzeiger_n',name_n,'.mph'); mphsave(model,Sol_name2); end end time=toc; disp(strcat('Benötigte Zeit: ',num2str(time),'s'))