matlab建模与仿真实例_MATLAB辅助ANSYS APDL进行负泊松比铰链结构建模仿真

       ANSYS有着强大的参数化建模能力,如果对命令流不太熟悉,或者需要建模复杂,用命令流写代码计算太麻烦,有时候需要借助matlab强大的矩阵运算能力。本例采用matlab辅助ansys进行负泊松比结构的参数化建模,如图所示,选择中间square型结构,黑色杆和灰色杆分别是模量极大的直角杆。在B点两直角杆的角点铰接, 在A点和D点端点铰接。

3720cfe83d63434066cb31eb7a807d80.png

    图片引自:https://doi.org/10.1098/rspa.2014.0538

    为了保证数值稳定性,铰接小模量的弹性杆(蓝色)。画出示意图分别对关键点编号(黑色编号)角点铰接处有两个关键点分别属于两个直角杆、线编号(品红色)。

52e75f980233dc7ef93d1ee8fbc031db.png

    很容易找到规律。并以左下角单元为基本单元,进行排列展开。在matlab中求解关键点的位置坐标和连线关系矩阵。进行验证后,便完成了任意行任意列的阵列排列命令流建模。

86b2897cf341b98a2127df7ed8cc8c5f.png

       在anays中进行梁单元的铰接模拟需要用到以下命令流。有两种,分别是自由度耦合命令cp与自由度释放命令endrelease,关于这两个命令的简单案例,可以查阅王新敏的《ANSYS工程结构数值分析》p350~p353。根据该问题的特点,选择在直角点铰接处使用endrelease命令,在三杆连接处使用cp命令。

    在matlab中运行结尾的程序,便可生成ansys可以直接运行的命令流文件array.txt,命令流文件中提取了运算结果的位移数据等,以便在matlab中计算其等效泊松比。具体公式为,见论文:

https://doi.org/10.1098/rspa.2014.0538

ca4c84753ae0adb67b5fa5497856e4e3.png

    生成命令流文件array.txt后,复制到ansys的当前工作目录下(程序最后注释的部分可以将命令流文件自动发送到指定的工作目录下),在命令流输入窗口直接输入array.txt回车即可,完成该负泊松比结构的仿真计算。

a7b19a3afa3dd414449903199d85c3a6.png

     软件安装目录和软件安装管家最近都无法安装软件,如果有安装matlab的需求,可以选择这个网站,里面有安装包和详细的安装教程:

    http://www.softgj.com/win/matlab

    有的版本安装包装上后,会出现一些问题。之间试过2018的一个安装包,打开后初始化特别特别慢。最后换了2019a就好了,所以建议安装合适的版本。

88e36eadc5fe89a6876a236c7663fbca.png

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求解任意m行任意n列的square布周期性结构排布周期性结构的ansys建模相关设置的命令流%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear allclcclose all%% square % m行 n列m = 2;n = 3;%% gamma ga = 70; %角度制 gamma = ga*pi/180;%弧度制theta = 90*pi/180;alpha = 90*pi/180;p = 1;%mmOB = p*sin(gamma)/sin(alpha/2);%% 坐标coor_release(1,:) = [OB*cos(alpha /2)-p*cos(gamma),0];coor_release(2,:) = [OB*cos(alpha /2) + p*cos(gamma),0];coor_release(3,:) = [OB*cos(alpha /2) , OB*cos(alpha /2)];coor_release(4,:) = [0 , OB*cos(alpha /2) - p*cos(gamma)];coor_release(5,:) = [0 , OB*cos(alpha /2) + p*cos(gamma)];coor_release(6,:) = [-coor_release(3,1)  coor_release(3,2)];coor_release(7,:) = [-coor_release(1,1)  coor_release(1,2)];coor_release(8,:) = [-coor_release(2,1)  coor_release(2,2)];coor_release(9,:) = [-coor_release(3,1)  -coor_release(3,2)];coor_release(10,:) = [coor_release(4,1)  -coor_release(4,2)];coor_release(11,:) = [coor_release(5,1)  -coor_release(5,2)];coor_release(12,:) = [coor_release(3,1)  -coor_release(3,2)];dis_cell = 2*OB*cos(alpha /2);%% set 1  num 1:2+4ncoor_set1(1,:) = coor_release(9,:);coor_set1(2,:) = coor_release(9,:);coor_set1(3,:) = coor_release(10,:);coor_set1(4,:) = coor_release(11,:);coor_set1(5,:) = coor_release(12,:);coor_set1(6,:) = coor_release(12,:);num_set1 = 7;for i = 1:n-1    coor_set1(num_set1,:) = coor_set1(3,:)+i*[dis_cell 0];        num_set1 = num_set1 + 1;    coor_set1(num_set1,:) = coor_set1(4,:)+i*[dis_cell 0];        num_set1 = num_set1 + 1;    coor_set1(num_set1,:) = coor_set1(5,:)+i*[dis_cell 0];        num_set1 = num_set1 + 1;    coor_set1(num_set1,:) = coor_set1(6,:)+i*[dis_cell 0];        num_set1 = num_set1 + 1;end%% set 2coor_set2(1,:) = coor_release(8,:);coor_set2(2,:) = coor_release(7,:);coor_set2(3,:) = coor_release(1,:);coor_set2(4,:) = coor_release(2,:);num_set2 = 5;for i = 1:n-1    coor_set2(num_set2,:) = coor_set2(3,:)+i*[dis_cell 0];       num_set2 = num_set2 + 1;    coor_set2(num_set2,:) = coor_set2(4,:)+i*[dis_cell 0];       num_set2 = num_set2 + 1;end%% 阵列坐标num_array = 1;for i = 1:m %% set1 复制    for k = 1:(2+4*n)        coor(num_array,:) = coor_set1(k,:)+(i-1)*[0 dis_cell];        num_array = num_array + 1;    end  %% set2 复制      for k = 1:(2+2*n)        coor(num_array,:) = coor_set2(k,:)+(i-1)*[0 dis_cell];        num_array = num_array + 1;    endend %% 封顶    for k = 1:(2+4*n)        coor(num_array,:) = coor_set1(k,:)+m*[0 dis_cell];        num_array = num_array + 1;   enddisp('keypoint求解完成')%% line % m行 n列max_linehao = n*5*(m+1) + 5*m*(n+1);%% line haonum_point_begin_set1 = 1;num_point_pre = (2+4*n) + (n+1)*2;%set1 和set2num_point_pre_set1 = (2+4*n);%%set1行num_line = 1;for i = 1:m      num_point_begin = 1 + (i-1)*num_point_pre;      k = num_point_begin;%      %% line_hao_set1       line_hao_set1(1,:) = [k k+3];       line_hao_set1(2,:) = [k+3 k+5];       line_hao_set1(3,:) = [k+2 k+3];       line_hao_set1(4,:) = [k+1 k+2];       line_hao_set1(5,:) = [k+2 k+4];     %% set 1       for j = 1:n            for index = 1:5             line_hao(num_line,:) = line_hao_set1(index,:)+(j-1)*[4 4];%杆1             num_line = num_line + 1;           end       end     %% set 2       for j = 1:n+1         point_1 = k+num_point_pre + 4*(j-1);        point_2 = k+num_point_pre+1 + 4*(j-1);        point_3 = k+num_point_pre_set1+1 + 2*(j-1);        point_4 = k+num_point_pre_set1 + 2*(j-1);        point_5 = k + 4*(j-1);        point_6 = k+1 + 4*(j-1);           line_hao(num_line,:) = [point_1 point_4];%杆1             num_line = num_line + 1;           line_hao(num_line,:) = [point_4 point_6];%杆2             num_line = num_line + 1;          line_hao(num_line,:) = [point_3 point_4];%杆3             num_line = num_line + 1;           line_hao(num_line,:) = [point_2 point_3];%杆4             num_line = num_line + 1;           line_hao(num_line,:) = [point_3 point_5];%杆5             num_line = num_line + 1;       endend%% 封顶  %% line_hao_set1      num_point_begin = 1 + m*num_point_pre;      k = num_point_begin;%      %% line_hao_set1       line_hao_set1(1,:) = [k k+3];       line_hao_set1(2,:) = [k+3 k+5];       line_hao_set1(3,:) = [k+2 k+3];       line_hao_set1(4,:) = [k+1 k+2];       line_hao_set1(5,:) = [k+2 k+4];     %% set 1       for j = 1:n            for index = 1:5             line_hao(num_line,:) = line_hao_set1(index,:)+(j-1)*[4 4];%杆1             num_line = num_line + 1;           end       endhao = 1:size(line_hao,1);num_line_hao = [hao' line_hao];disp('line求解完成')%% 画图验证    disp('画图');    plot(coor(:,1),coor(:,2),'b*');    axis equal     hold on     %% point number     for i = 1:size(coor,1)         hao(i,1) = i;         text(coor(i,1),coor(i,2),[num2str(hao(i,1))],'VerticalAlignment','bottom','FontSize',6);        %   pause(0.7)    end%        %% line number          tanhuang_hao = 3:5:(max_linehao-2);         for i = 1:size(line_hao,1)        line(coor(line_hao(i,:)',1),coor(line_hao(i,:)',2))      end         for i = 1:size(tanhuang_hao,2)        line(coor(line_hao( tanhuang_hao(i),:)',1),coor(line_hao( tanhuang_hao(i),:)',2),'Color','cyan')       end    hold off           for i = 1:size(line_hao,1)         mid_coor = [(coor(line_hao(i,1),1)+coor(line_hao(i,2),1))/2  (coor(line_hao(i,1),2)+coor(line_hao(i,2),2))/2];         hao(i,1) = i;           text(mid_coor(1,1),mid_coor(1,2),[num2str(hao(i,1))],'Color','magenta','FontSize',8);     end  hold off fid = fopen('array.txt','w');  %% 材料截面信息 s_pre = {'finish'           '  /clear'           ' /prep7'           ' !beam单元'          ' ET,1,BEAM188'          '!材料1'           'mp,ex,1,72e6'          ' mp,prxy,1,0.3'          '!材料2'          ' mp,ex,2,1'          ' mp,prxy,2,0.49'     '     !截面信息 矩形截面 B=H'         ' SECTYPE,   1, BEAM, RECT, , 0   '       '   SECOFFSET, CENT '         ' SECDATA,0.1,0.1,0,0,0,0,0,0,0,0,0,0'}; for i = 1:size( s_pre,1)       fprintf(fid, '%s\n',s_pre{i,1}); end %% 获得keypoint命令流for i = 1:size(coor,1)  s_kpoint{i,1} = strcat('k',',',num2str(i),',',num2str(coor(i,1)),',',num2str(coor(i,2)));end%% 打印keypoint命令流   fprintf(fid, '%s\n',  '!keypoint命令流');for i = 1:size(coor, 1)    fprintf(fid, '%s\n', s_kpoint{i,1});end  %% 获得Line命令流    fprintf(fid, '%s\n',  '!line命令流');for i = 1:size(line_hao,1)  s_Linehao{i,1} = strcat('l',',',num2str(line_hao(i,1)),',',num2str(line_hao(i,2)));end%% 打印Line命令流for i = 1:size(line_hao, 1)    fprintf(fid, '%s\n',  s_Linehao{i,1});end%% 打印赋材料命令流 fprintf(fid, '%s\n',  '!赋材料');fprintf(fid, '%s\n',  'allsel'); s_material_1 = strcat('lsel',',','s',',,,',num2str(1),',',num2str(max_linehao));fprintf(fid, '%s\n',  s_material_1);fprintf(fid, '%s\n',  'latt,1,,1,,,,1'); s_material_2 = strcat('lsel',',','s',',,,',num2str(3),',',num2str(max_linehao-2),',',num2str(5));fprintf(fid, '%s\n',  s_material_2);fprintf(fid, '%s\n',  'latt,2,,1,,,,1');%% 打印mesh 命令 s_mesh = {'allsel'             'lesize,all,,,3'            'lmesh,all'}; for i = 1:size( s_mesh,1)       fprintf(fid, '%s\n',   s_mesh{i,1}); end disp('mesh完成') %% 打印release 命令 fprintf(fid, '%s\n',  '!定义release自由度约束');fprintf(fid, '%s\n',  'allsel');for k_line = 1:5:max_linehao-4   s_release = strcat('lsel',',','s',',,,',num2str(k_line),',',num2str(k_line+2));     fprintf(fid, '%s\n', s_release);      fprintf(fid, '%s\n',  'esll');       fprintf(fid, '%s\n',  'endrelease,,,rotz');       fprintf(fid, '%s\n',  'allsel');   s_release = strcat('lsel',',','s',',,,',num2str(k_line+2),',',num2str(k_line+4));     fprintf(fid, '%s\n', s_release);      fprintf(fid, '%s\n',  'esll');       fprintf(fid, '%s\n',  'endrelease,,,rotz');       fprintf(fid, '%s\n',  'allsel');end disp('release完成') %% 打印cp 命令 num_point_pre = (2+4*n) + (n+1)*2;%set1 和set2num_point_pre_set1 = (2+4*n);%%set1行 fprintf(fid, '%s\n',  '!定义cp自由度约束');fprintf(fid, '%s\n',  'allsel');for i = 1:m+1    k_line_start = 1+(i-1)*num_point_pre;    k_line_end = k_line_start + num_point_pre_set1 - 2;    for k = k_line_start:4:k_line_end         s_cp = strcat('ksel',',','s',',,,',num2str(k),',',num2str(k+1));         fprintf(fid, '%s\n', s_cp);         fprintf(fid, '%s\n',  'nslk,s');         fprintf(fid, '%s\n',  'cp,next,ux,all');         fprintf(fid, '%s\n',  'cp,next,uy,all');    endend disp('cp完成')%% 打印边界约束命令fprintf(fid, '%s\n',  'allsel');for i = 1:m    k_line_start = 1+(i-1)*num_point_pre;    k_bc_start = k_line_start + num_point_pre_set1;    k_bc_end = i*num_point_pre;    %% 左边     s_bc = strcat('dk',',',num2str(k_bc_start),',','UX');         fprintf(fid, '%s\n', s_bc);     s_bc = strcat('dk',',',num2str(k_bc_start),',','UZ');         fprintf(fid, '%s\n', s_bc);         if i==1            s_bc = strcat('dk',',',num2str(k_bc_start),',','UY');            fprintf(fid, '%s\n', s_bc);         end     %% 右边         if i==1          s_bc = strcat('dk',',',num2str(k_bc_end),',','UY');         fprintf(fid, '%s\n', s_bc);     end      s_bc = strcat('dk',',',num2str(k_bc_end),',','UX',',','0.1');         fprintf(fid, '%s\n', s_bc);        s_bc = strcat('dk',',',num2str(k_bc_end),',','UZ');         fprintf(fid, '%s\n', s_bc);         end disp('BC 完成')%% 求解后处理   s_solu_post = {'allsel'            'finish'            '/solu'            'solve'           ' /POST1 '             '/EFACET,1'             ' PLNSOL, U,SUM, 1,1.0'};               for i = 1:size(s_solu_post,1)       fprintf(fid, '%s\n',s_solu_post{i,1}); end%% 打印输出位移云图的命令流load xianshi s_output_result = xianshi;       for i = 1:size( s_output_result,1)       fprintf(fid, '%s\n', s_output_result{i,1}); end%% 打印提取节点坐标和节点位移 命令流load readresult  s_read_result =  readresult ;       for i = 1:size( s_read_result,1)       fprintf(fid, '%s\n',s_read_result{i,1}); end disp('命令流打印完成')fclose(fid);%% 复制命令流文件到ansys workspace% srcpath=[]; % 源文件全路径名% dstpath='D:\ansys\workspace\ouhe\';% 目标文件全路径名% % filename='array_cp_release.txt';% filename='array.txt';% fdt = dir([srcpath filename]);% for k = 1:length(fdt)%     fn = fdt(k).name;%     if ~isdir(fn)       % 检验是否目录,是目录跳过%         ofn = [srcpath fn];             % 源文件全路径名%         nfn = [dstpath fn];      % 目标文件全路径名%         copyfile(ofn,nfn);          % 拷贝文件%     end% end%  disp('命令流发送完成')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PDFMATLABSIMULINK建模仿真实例精讲-MATLAB SIMULINK建模仿真实例精讲.part25.rar 本帖最后由 liu409485 于 2012-4-9 18:20 编辑 文件很大。附件多 QQ截图20120409182832.png QQ截图20120409182954.png MATLAB SIMULINK建模仿真实例精讲.part28.rar MATLAB SIMULINK建模仿真实例精讲.part27.rar MATLAB SIMULINK建模仿真实例精讲.part26.rar MATLAB SIMULINK建模仿真实例精讲.part25.rar MATLAB SIMULINK建模仿真实例精讲.part24.rar MATLAB SIMULINK建模仿真实例精讲.part23.rar MATLAB SIMULINK建模仿真实例精讲.part22.rar MATLAB SIMULINK建模仿真实例精讲.part21.rar MATLAB SIMULINK建模仿真实例精讲.part20.rar MATLAB SIMULINK建模仿真实例精讲.part19.rar MATLAB SIMULINK建模仿真实例精讲.part18.rar MATLAB SIMULINK建模仿真实例精讲.part17.rar MATLAB SIMULINK建模仿真实例精讲.part16.rar MATLAB SIMULINK建模仿真实例精讲.part15.rar MATLAB SIMULINK建模仿真实例精讲.part14.rar MATLAB SIMULINK建模仿真实例精讲.part13.rar MATLAB SIMULINK建模仿真实例精讲.part12.rar MATLAB SIMULINK建模仿真实例精讲.part11.rar MATLAB SIMULINK建模仿真实例精讲.part10.rar MATLAB SIMULINK建模仿真实例精讲.part09.rar MATLAB SIMULINK建模仿真实例精讲.part08.rar MATLAB SIMULINK建模仿真实例精讲.part07.rar MATLAB SIMULINK建模仿真实例精讲.part06.rar MATLAB SIMULINK建模仿真实例精讲.part05.rar MATLAB SIMULINK建模仿真实例精讲.part04.rar MATLAB SIMULINK建模仿真实例精讲.part03.rar MATLAB SIMULINK建模仿真实例精讲.part02.rar MATLAB SIMULINK建模仿真实例精讲.part01.rar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值