# -*- coding: utf-8 -*- from abaqus import * from abaqusConstants import * import re # ================== 用户配置区域 ================== MODEL_NAME = 'MESH_M' # 模型名称 INTERACTION_PROPERTY = 'IntProp-1' # 相互作用属性 CONTACT_PREFIX = ('GM', 'GS') # (主面前缀, 从面前缀) ADJUST_TOLERANCE = 0.1 # 调整容差值 # ================================================= def main(): # 初始化视图设置 session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Initial') try: model = mdb.models[MODEL_NAME] assembly = model.rootAssembly except KeyError: print(f"错误:模型'{MODEL_NAME}'不存在!") return # 自动检测接触对 contact_pairs = detect_contact_pairs(assembly) if not contact_pairs: print("未检测到符合命名规则的接触对!") return # 创建接触相互作用 success_count = 0 total_pairs = len(contact_pairs) print(f"开始创建 {total_pairs} 对接触...") for idx, pair in enumerate(contact_pairs, 1): num_id, master_surf, slave_surf =

时间: 2025-06-05 10:21:35 AIGC 浏览: 110
### 如何在Abaqus中使用Python脚本自动检测并创建接触对 要在Abaqus中利用Python脚本实现自动化检测和创建接触对的过程,可以遵循以下逻辑和技术要点: #### 1. 接触对的基础概念 在有限元分析中,接触对是指两个相互作用的几何实体之间的交互关系。通常分为 **主表面(Master Surface)** 和 **从表面(Slave Surface)**。通过定义这些接触对,可以在模拟过程中捕捉到物体间的摩擦、滑动或其他形式的物理互动。 为了实现这一目标,可以通过编写 Python 脚本来完成接触对的设置工作,从而减少手动操作的时间成本,并提高建模效率[^1]。 #### 2. 自动化检测与创建接触对的核心代码框架 以下是用于自动检测并创建接触对的一个典型代码示例: ```python from abaqus import * from abaqusConstants import * def create_contact_pair(instance_name_1, instance_name_2, surface_name_1, surface_name_2): """ 创建接触对函数 参数: instance_name_1 (str): 主体实例名称 instance_name_2 (str): 从属实例名称 surface_name_1 (str): 主表面对应面片名称 surface_name_2 (str): 从表面对应面片名称 """ # 获取模型数据库对象 mdb = session.models['Model-1'] # 定义主表面区域 master_region = mdb.rootAssembly.instances[instance_name_1].surfaces[surface_name_1] # 定义从表面区域 slave_region = mdb.rootAssembly.instances[instance_name_2].surfaces[surface_name_2] # 创建 Interaction 属性集 interaction_module = mdb.InteractionProperty('Contact_Prop') interaction_module.NormalBehavior( pressureOverclosure=HARD, allowSeparation=True) # 添加 Contact Pair 到模型 contact_interaction = mdb.ContactStd( name='Int-Contact', createStepName='Initial') contact_interaction.assignRegionPair( regionPairs=((master_region, slave_region),)) create_contact_pair('Part-1', 'Part-2', 'Surface-Master', 'Surface-Slave') ``` 此代码片段展示了如何通过指定不同的部件实例及其对应表面上的信息来建立一对标准接触关系。其中 `Interaction` 模块负责管理材料间的作用力特性参数配置;而具体哪部分作为主导方或者被动响应者则由用户自行设定好之后传递给该方法调用[^2]。 #### 3. 错误排查技巧 当尝试运行上述类型的脚本时可能会遇到各种各样的问题。一些常见的错误原因以及解决方案包括但不限于以下几个方面: - **拼写错误**: 确保所有变量名都严格按照文档说明书写无误。 - **路径不匹配**: 如果引用了其他模块或资源文件,请确认其相对位置正确与否。 - **版本差异**: 不同版本之间可能存在API变更情况,因此建议查阅官方手册获取最新支持列表[^4]。 另外值得注意的是,在调试阶段最好先单独测试每一步骤功能是否正常运作再组合成整体程序流执行,这样有助于更快定位潜在缺陷所在之处[^3]。 ---
阅读全文

相关推荐

# -*- coding: UTF-8-*- from abaqusConstants import * # type: ignore from abaqusGui import * # type: ignore from kernelAccess import mdb, session # type: ignore import os import csv global savepath thisPath = os.path.abspath(__file__) thisDir = os.path.dirname(thisPath) class CubeDialog(AFXForm): # type: ignore def __init__(self, owner): AFXForm.__init__(self, owner) self.owner = owner self.partName = 'ParamCube' self.modelName = 'ParametricModel' # 输入框 self.length = AFXTextField(p=self, ncols=12, labelText='长度 (mm):', tgt=self, sel=0) self.width = AFXTextField(p=self, ncols=12, labelText='宽度 (mm):', tgt=self, sel=1) self.height = AFXTextField(p=self, ncols=12, labelText='高度 (mm):', tgt=self, sel=2) # 设置默认值 self.length.setText('10') self.width.setText('10') self.height.setText('10') # 确认按钮 AFXButton(p=self, text='生成立方体', tgt=self, sel=self.onConfirm) def onConfirm(self, sender, sel): try: l = float(self.length.getText()) w = float(self.width.getText()) h = float(self.height.getText()) except: showAFXErrorDialog(getAFXApp().getAFXMainWindow(), '请输入有效的数字!') return # 创建模型和部件 if self.modelName not in mdb.models.keys(): my_model = mdb.Model(name=self.modelName) else: my_model = mdb.models[self.modelName] my_part = my_model.Part( name=self.partName, dimensionality=THREE_D, type=DEFORMABLE_BODY ) my_part.Box(width=w, length=l, height=h) # 刷新视图 session.viewports['Viewport: 1'].setValues(displayedObject=my_part) self.hide() # 注册插件 toolset = getAFXApp().getAFXMainWindow().getPluginToolset() toolset.registerGuiMenuButton( buttonText='参数化立方体', object=CubeDialog(toolset), kernelInitString='import sys', author='Your Name', version='1.0', description='生成参数化立方体' )创建各级__init__.py空文件是什么意思

# -*- coding: utf-8 -*- from abaqus import * from abaqusConstants import * from caeModules import * from odbAccess import * import math import csv import os import numpy as np from scipy.stats import qmc def run_fem_simulation(params): try: tool_position = params['tool_position'] tool_step = params['tool_step'] ae = params['ae'] R = params['R'] # ---------------几何参数定义---------------- ap = 10.0 # 轴向切深 ae = 3.0 # 径向切深 ft = 0.5 # 每齿进给量 min_mesh = 0.5 # 切削区网格尺寸 max_mesh = 3.0 # 非切削区网格尺寸 # ---------------材料参数定义---------------- length = 120.0 # 工件长度(X方向) width = 60.0 # 工件宽度(Z方向) depth = 5.0 # 工件厚度(Y方向) material_name = 'TC4' E = 113800.0 # 弹性模量 (MPa) nu = 0.33 # 泊松比 density = 4.43e-6 # 密度 (kg/mm³) # ---------------刀具参数定义---------------- R = 6.0 # 刀具半径 helix_angle1 = 38 # 螺旋角1,单位:度 helix_angle2 = 41 E_tool = 2.1e5 # MPa I = math.pi * R ** 4 / 4 # 圆截面惯性矩 # ---------------切削力系数------------------ kt1, kte1 = 2026.48, 7.16 # 切向力系数 kn1, kne1 = 972.23, 16.99 # 法向力系数 ka1, kae1 = 764.08, 0.51 # 轴向力系数 kt2, kte2 = 2294.84, 10.69 # 切向力系数 kn2, kne2 = 988.74, 18.20 # 法向力系数 ka2, kae2 = 1015.45, 1.39 # 轴向力系数 N = 4 # 刀具齿数 omega = 5000 # 主轴转速 (rpm) steps = 64 # 旋转步数 phis = math.pi / 2 - math.acos(1 - ae / R) phie = math.pi / 2 convergence_threshold = 0.1 # 收敛阈值 model_name = 'Model-%d-%d' % (tool_position, tool_step) if model_name in mdb.models.keys(): del mdb.models[model_name] myModel = mdb.Model(name=model_name) # ---------------几何建模--------------------- # Part创建 mySketch = myModel.ConstrainedSketch(name='sketch', sheetSize=200) mySketch.rectangle((0, 0), (length, depth)) myPart = myModel.Part(name='WorkPiece', dimensionality=THREE_D, type=DEFORMABLE_BODY) myPart.BaseSolidExtrude(sketch=mySketch, depth=width) # 分割工件(用于不同区域网格划分) datum = myPart.DatumPlaneByPrincipalPlane(principalPlane=XYPLANE, offset=width / 2) myPart.PartitionCellByDatumPlane( datumPlane=myPart.datums[datum.id], cells=myPart.cells.getSequenceFromMask(mask=('[#1 ]',), ) ) # ---------------网格划分--------------------- # 切削区域(上半部分)精细网格 region_edges = myPart.edges.getByBoundingBox( xMin=-1e-5, xMax=length + 1e-5, yMin=-1e-5, yMax=depth + 1e-5, zMin=width / 2 - 1e-5, zMax=width + 1e-5 ) myPart.seedEdgeBySize(edges=region_edges, size=min_mesh, constraint=FINER) # 非切削区域(下半部分)粗网格 other_edges = myPart.edges.getByBoundingBox( xMin=-1e-5, xMax=length + 1e-5, yMin=-1e-5, yMax=depth + 1e-5, zMin=-1e-5, zMax=width / 2 + 1e-5 ) myPart.seedEdgeBySize(edges=other_edges, size=max_mesh, constraint=FINER) myPart.generateMesh() # ---------------材料定义--------------------- myMaterial = myModel.Material(name=material_name) myMaterial.Density(table=((density,),)) myMaterial.Elastic(table=((E, nu),)) # 截面属性 mySection = myModel.HomogeneousSolidSection(name='Section', material=material_name) region = myPart.Set(cells=myPart.cells[:], name='AllCells') myPart.SectionAssignment(region=region, sectionName='Section') # ---------------装配体操作------------------- myAssembly = myModel.rootAssembly instance_name = 'WorkPiece-Instance' myInstance = myAssembly.Instance(name=instance_name, part=myPart, dependent=ON) # ---------------边界条件设置----------------- # 固定底面(Z=0) # 选择在 xz 平面上的所有节点 nodes = myInstance.nodes fixed_nodes = nodes.getByBoundingBox(xMin=-1e-05, xMax=length, yMin=-1e-05, yMax=depth, zMin=-1e-05, zMax=1e-05) fixed_node_set = myAssembly.Set(nodes=fixed_nodes, name='FixedNodeSet' ) myModel.DisplacementBC(name='BC-FIX', createStepName='Initial', region=fixed_node_set, u1=0.0, u2=0.0, u3=0.0 ) # ---------------分析步设置------------------- if tool_position > 1: myModel.StaticStep(name='Step-del', previous='Initial', maxNumInc=200, timePeriod=1e-05, initialInc=1e-10, minInc=1e-10, maxInc=1e-05 ) myModel.StaticStep(name='Step-1', previous='Step-del', nlgeom=ON, maxNumInc=200, timePeriod=0.1, initialInc=1e-05, minInc=1e-05, maxInc=1e-02 ) else: myModel.StaticStep(name='Step-1', previous='Initial', nlgeom=ON, maxNumInc=200, timePeriod=0.1, initialInc=1e-05, minInc=1e-05, maxInc=1e-02 ) ###---------------------------------------------创建被切削区域集合----------------------------------------------------- # 切削区节点坐标 xmin = -1e-05 xmax = length ymin = -1e-05 ymax = ae + 1e-05 zmin = width - ap + 1e-05 zmax = width + 1e-05 # 创建被切削节点集合 nodes = myInstance.nodes milling_nodes = nodes.getByBoundingBox(xMin=xmin, xMax=xmax, yMin=ymin, yMax=ymax, zMin=zmin, zMax=zmax) node_set_name = 'MillingNodes' myAssembly.Set(nodes=milling_nodes, name=node_set_name) print(f'Created node set [{node_set_name}] containing {len(milling_nodes)} nodes') # 创建被切削单元集合 elements = myInstance.elements milling_elements = elements.getByBoundingBox(xMin=xmin, xMax=xmax + min_mesh, yMin=ymin, yMax=ymax, zMin=zmin - min_mesh, zMax=zmax) element_set_name = 'MillingElements' myAssembly.Set(elements=milling_elements, name=element_set_name) print(f'Created element set [{element_set_name}] containing {len(milling_elements)} elements') #生死单元单元格集合 milling_cells = milling_elements.getByBoundingBox(xMin=- 1e-5, xMax=(tool_position - 1) * R + 1e-5, yMin=ymin, yMax=ymax, zMin=zmin - min_mesh, zMax=zmax) removed_name = f'remove-P{tool_position}' myAssembly.Set(elements=milling_cells, name=removed_name) print(f'Created removed feature set [{removed_name}] containing {len(milling_cells)} elements') #变形节点集合 deformation_nodes = nodes.getByBoundingBox(xMin=(tool_position - 1) * R - min_mesh/2, xMax=(tool_position - 1) * R + min_mesh/2, yMin=ae - min_mesh + min_mesh/2, yMax=ae + min_mesh - min_mesh/2, zMin=width - ap + tool_step * min_mesh - min_mesh/2, zMax=width - ap + tool_step * min_mesh + min_mesh/2) if deformation_nodes: deformation_set_name = f'DEFORMATION-P{tool_position}-M{tool_step}' myAssembly.Set(nodes=deformation_nodes, name=deformation_set_name) print(f'Created deformation set [{deformation_set_name}] with {len(deformation_nodes)} nodes') else: print(f'[Warning] No deformation nodes found for tool position {tool_position}') ###----------------------------------------------计算并施加载荷--------------------------------------------------------- convergence_threshold = 0.2 displacement = 0 previous_ae = 0 iteration_number = 1 if tool_position % 2 == 1: helix_angle = helix_angle1 else: helix_angle = helix_angle2 dphi = math.pi * 2 / steps if helix_angle != 0: db = R * dphi / math.tan(math.radians(helix_angle)) else: db = ap / steps steps_axial = int(ap / db + 1) milling_set = {} for node in milling_nodes: node_id = node.label node_x, node_y, node_z = node.coordinates milling_set[node_id] = (node_x, node_y, node_z) loaded_node_coords = [] # === 计算所有齿中底部微元(cnt4=0)的最小切出步 === dphi = math.pi * 2 / steps # 旋转步长 min_exit_step = steps # 初始化为最大值 for cnt3 in range(N): # 计算当前齿底部微元切出所需步数 phia_needed = math.pi / 2 - phis - cnt3 * 2 * math.pi / N # 调整phia_needed到0-2π范围内 while phia_needed < 0: phia_needed += 2 * math.pi while phia_needed >= 2 * math.pi: phia_needed -= 2 * math.pi # 计算切出步数 cnt1_exit = math.ceil(phia_needed / dphi) # 更新最小切出步 if cnt1_exit < min_exit_step: min_exit_step = cnt1_exit while abs(ae - previous_ae) > convergence_threshold: Fy_total = [0.0] * steps_axial zj_list = [width - ap + j * db for j in range(steps_axial)] # 每个cnt4对应的Z轴坐标 delta_y_current = [0.0] * steps_axial # 当前轮的刀具变形,初始化为0 loaded_node_coords = [] # 清空加载节点坐标 for cnt1 in range(steps): if cnt1 == (min_exit_step - 1) + tool_step: for cnt3 in range(N): if cnt3 in [0, 2]: # 齿编号0和2使用第一组系数 kt, kte = kt1, kte1 kn, kne = kn1, kne1 ka, kae = ka1, kae1 else: # 齿编号1和3使用第二组系数 kt, kte = kt2, kte2 kn, kne = kn2, kne2 ka, kae = ka2, kae2 for cnt4 in range(steps_axial): phia = phis + cnt1 * dphi + cnt3 * 2 * math.pi / N - cnt4 * db * math.tan( math.radians(helix_angle)) / R phia = phia % (2 * math.pi) if phis <= phia <= phie: h = ft * math.sin(phia) Ft = kt * h * db + kte * db Fn = kn * h * db + kne * db Fa = ka * h * db + kae * db else: Ft, Fn, Fa = 0, 0, 0 # 将切削力分解到直角坐标系 Fx = -Ft * math.cos(phia) - Fn * math.sin(phia) Fy = Ft * math.sin(phia) - Fn * math.cos(phia) Fz = Fa # 累加Fy Fy_total[cnt4] += Fy for i in range(int(length / R) - 1): # 计算刀具坐标系切削微元位置 micro_x = R * math.cos(phia) + (tool_position - 1) * R micro_y = R * math.sin(phia) - (depth - ae) - delta_y_current[cnt4] micro_z = width - ap + cnt4 * db # 找到最近的节点 min_distance = float('inf') nearest_node = None for node_id, (node_x, node_y, node_z) in milling_set.items(): distance = math.sqrt( (micro_x - node_x) ** 2 + (micro_y - node_y) ** 2 + (micro_z - node_z) ** 2) if distance < min_distance: min_distance = distance nearest_node = node_id # 创建载荷 if nearest_node is not None and (Fx != 0 or Fy != 0 or Fz != 0): node = milling_nodes.sequenceFromLabels((nearest_node,)) node_name = 'Load-' + str(cnt1) + '-' + str(cnt3) + '-' + str(cnt4) load_name = 'Force-' + str(cnt1) + '-' + str(cnt3) + '-' + str(cnt4) node_set = myAssembly.Set(nodes=node, name=node_name) myModel.ConcentratedForce(name=load_name, createStepName='Step-1', region=node_set, cf1=Fx, cf2=Fy, cf3=Fz) node_x, node_y, node_z = milling_set[nearest_node] loaded_node_coords.append((node_x, node_y, node_z)) # 创建参考点 adjusted_point = (micro_x, micro_y, micro_z) reference_point_name = 'RP-' + str(cnt1) + '-' + str(cnt3) + '-' + str(cnt4) reference_point = myAssembly.ReferencePoint(point=adjusted_point) # 刀具变形计算 delta_y_new = [] # 创建新列表存储本轮的变形计算结果 for j in range(steps_axial): zj = zj_list[j] delta = 0.0 for jp in range(steps_axial): zjp = zj_list[jp] if zj <= zjp: K = zjp ** 2 * (3 * zj - zjp) / (6 * E_tool * I) else: K = zj ** 2 * (3 * zjp - zj) / (6 * E_tool * I) delta += K * Fy_total[jp] delta_y_new.append(delta) # 更新delta_y_current用于下一次迭代(只在有计算值时更新) if delta_y_new: # 确保列表不为空 delta_y_current = delta_y_new ###------------------------------------------------------生死单元------------------------------------------------ if tool_position > 1: intname = 'Int-' + str(tool_position) stepname = 'Step-del' element_name = removed_name int_region = myAssembly.sets[element_name] myModel.ModelChange(name=intname, createStepName=stepname, region=int_region, regionType=ELEMENTS, activeInStep=False, includeStrain=False ) ###-------------------------------------------------------创建作业--------------------------------------------------- job_name = f'Model-{tool_position}-{tool_step}-{iteration_number}' myJob = mdb.Job(name=job_name, model=model_name, type=ANALYSIS, numCpus=24, numDomains=24) myJob.submit() mdb.jobs[job_name].waitForCompletion() ###-----------------------------------------------------打开ODB文件-------------------------------------------------- try: odb = openOdb(path=job_name + '.odb') step_name = 'Step-1' displacement_field = odb.steps[step_name].frames[-1].fieldOutputs['U'] instance_name = 'WORKPIECE-INSTANCE' instance = odb.rootAssembly.instances[instance_name] deformation_name = f'DEFORMATION-P{tool_position}-M{tool_step}' if deformation_name in odb.rootAssembly.nodeSets: region = odb.rootAssembly.nodeSets[deformation_name] displacement_subset = displacement_field.getSubset(region=region) displacement = displacement_subset.values[0].data[2] else: print(f"[Critical] Node set {deformation_name} missing in ODB!") displacement = 0 # 默认值或终止 print(f'ae={ae},displacement={displacement}') except Exception as e: print(f"Error reading ODB: {str(e)}") displacement = 0 finally: odb.close() pre_ae = ae ae -= abs(displacement) ae = (ae + previous_ae)/2 previous_ae = pre_ae if iteration_number > 10: break else: iteration_number += 1 final_displacement = displacement # 从ODB获取最终位移 final_ae = ae # 最终径向切深 print('final ae is:', final_ae) print('final displacement is:', final_displacement) return { 'displacement': final_displacement, 'final_ae': final_ae, 'status': 'success', 'message': 'Simulation completed successfully' } except Exception as e: return { 'status': 'error', 'message': str(e), 'displacement': None, 'final_ae': None } def generate_parameters(samples): """生成拉丁超立方采样参数组合""" param_ranges = { 'tool_position': (1, 19), 'tool_step': (1, 11) } # 拉丁超立方采样 sampler = qmc.LatinHypercube(d=len(param_ranges)) sample_data = sampler.random(n=samples) # 构造参数列表 params_list = [] for sample in qmc.scale(sample_data, [v[0] for v in param_ranges.values()], [v[1] for v in param_ranges.values()]): params = { 'tool_position': int(round(sample[0])), 'tool_step': int(round(sample[1])), 'ae': 3.0, # 固定值 'R': 5.0 # 固定值 } params_list.append(params) return params_list # 数据保存模块 class DataRecorder: def __init__(self, filename="simulation_data.csv"): self.filename = filename self._init_file() def _init_file(self): """初始化数据文件""" if not os.path.exists(self.filename): with open(self.filename, 'w', newline='') as f: writer = csv.writer(f) writer.writerow([ 'tool_position', 'tool_step', 'ae_input', 'R_input', 'displacement', 'final_ae', 'status' ]) def save_record(self, params, result): """保存单条记录""" record = { 'tool_position': params['tool_position'], 'tool_step': params['tool_step'], 'ae_input': params['ae'], 'R_input': params['R'], 'displacement': result.get('displacement', None), 'final_ae': result.get('final_ae', None), 'status': result['status'] } with open(self.filename, 'a', newline='') as f: writer = csv.DictWriter(f, fieldnames=record.keys()) writer.writerow(record) if __name__ == '__main__': # 初始化数据记录器 recorder = DataRecorder() # 生成参数组合 param_combinations = generate_parameters(samples=200) # 执行参数扫描 for idx, params in enumerate(param_combinations,1): print(f"\n 正在执行参数组合 {idx}/{len(param_combinations)}") print(f" 刀具位置: {params['tool_position']}") print(f" 刀具旋转步: {params['tool_step']}") print(f" 径向切深: {params['ae']}mm") print(f" 刀具半径: {params['R']}mm") # 执行仿真 result = run_fem_simulation(params) # 处理结果 if result['status'] == 'success': print(f"成功完成: 位移={result['displacement']}mm, 最终ae={result['final_ae']}mm") else: print(f"执行失败: {result['message']}") # 保存数据 recorder.save_record(params, result) print("\n所有参数组合执行完成!") print(f"数据文件已保存至: {os.path.abspath(recorder.filename)}") 以上是我的py代码,在abaqus中运行速度特别缓慢

# -*- coding: utf-8 -*- from abaqus import * from abaqusConstants import * import random import math import numpy as np import os # Operating system import shutil # copying or moving files # Define updated radius parameters core_rad = 15.8 # Core radius in mm coating_thickness = 2.1 # Soft coating thickness in mm inclusion_rad = 10.0 # Total inclusion radius in mm (given) # Concrete matrix dimensions (150mm x 150mm x 1600mm) column_width = 150.0 # mm column_length = 150.0 # mm column_height = 1600.0 # mm # ================================================ # Optimized Random Placement of Inclusions # ================================================ def random_placement_optimized(max_incl): # Create a grid for spatial partitioning (each cell holds one possible inclusion) grid_size = inclusion_rad * 2 # Grid cell size is double the radius of an inclusion x_grid_count = int(column_width / grid_size) y_grid_count = int(column_length / grid_size) z_grid_count = int(column_height / grid_size) # Generate available grid cells available_cells = [(i, j, k) for i in range(x_grid_count) for j in range(y_grid_count) for k in range(z_grid_count)] random.shuffle(available_cells) # Shuffle to ensure random distribution of inclusions x_coordinate = [] y_coordinate = [] z_coordinate = [] # Now place inclusions randomly by picking from the available grid cells num_incl = 0 while num_incl < max_incl: # Pick a random grid cell grid_cell = available_cells.pop() # Get a random available cell # Calculate the center of the inclusion based on the grid random_x = grid_cell[0] * grid_size + random.uniform(-inclusion_rad, inclusion_rad) random_y = grid_cell[1] * grid_size + random.uniform(-inclusion_rad, inclusion_rad) random_z = grid_cell[2] * grid_size + random.uniform(-inclusion_rad, inclusion_rad) # Ensure that the inclusion is within the bounds of the column if (coating_thickness <= random_x <= column_width - coating_thickness and coating_thickness <= random_y <= column_length - coating_thickness and coating_thickness <= random_z <= column_height - coating_thickness): # Check if the new inclusion overlaps with any existing inclusions isPointIntersecting = False for j in range(len(x_coordinate)): # Calculate the distance from the new point to existing points distance = math.sqrt((random_x - x_coordinate[j])**2 + (random_y - y_coordinate[j])**2 + (random_z - z_coordinate[j])**2) if distance < (2 * inclusion_rad): # Ensure no overlap between inclusions isPointIntersecting = True break if not isPointIntersecting: # Add to the list of placed coordinates x_coordinate.append(random_x) y_coordinate.append(random_y) z_coordinate.append(random_z) num_incl += 1 return x_coordinate, y_coordinate, z_coordinate # ================================================ # Partition Function (for dividing the part geometry into cells) # ================================================ def partition(i, q, x_coordinate, y_coordinate, z_coordinate): a = core_rad * math.sin(math.pi / 6) b = core_rad * math.cos(math.pi / 6) # Ensure Part-1 is created if not already done if 'Part-1' not in mdb.models['Model-%d' % (q)].parts: mdb.models['Model-%d' % (q)].Part(dimensionality=THREE_D, name='Part-1', type=DEFORMABLE_BODY) mdb.models['Model-%d' % (q)].parts['Part-1'].BaseSolidExtrude(depth=column_height, sketch=mdb.models['Model-%d' % (q)].sketches['__profile__']) del mdb.models['Model-%d' % (q)].sketches['__profile__'] # Create Datum Planes dp1 = mdb.models['Model-%d' % (q)].parts['Part-1'].DatumPlaneByPrincipalPlane(offset=x_coordinate[i], principalPlane=YZPLANE) dp2 = mdb.models['Model-%d' % (q)].parts['Part-1'].DatumPlaneByPrincipalPlane(offset=y_coordinate[i], principalPlane=XZPLANE) # Ensure the sketch '__profile__' exists before using it sketch_name = '__profile__' if sketch_name not in mdb.models['Model-%d' % (q)].sketches: mdb.models['Model-%d' % (q)].ConstrainedSketch(name=sketch_name, sheetSize=200.0) # Partition geometry based on new core radius and coating thickness mdb.models['Model-%d' % (q)].sketches[sketch_name].Line(point1=(0.0, 0.0), point2=(inclusion_rad, 0.0)) c_1 = mdb.models['Model-%d' % (q)].sketches[sketch_name].ArcByCenterEnds(center=(0, 0), direction=CLOCKWISE, point1=(0, inclusion_rad), point2=(inclusion_rad, 0)) # Partition cells mdb.models['Model-%d' % (q)].parts['Part-1'].PartitionCellBySketch(cells= mdb.models['Model-%d' % (q)].parts['Part-1'].cells.findAt(((0.1, 0.1, 0.1), )), sketch=mdb.models['Model-%d' % (q)].sketches[sketch_name], sketchOrientation=TOP, sketchPlane=mdb.models['Model-%d' % (q)].parts['Part-1'].datums[dp1.id], sketchUpEdge=mdb.models['Model-%d' % (q)].parts['Part-1'].edges.findAt((0.0, 0.0, 5.0), )) # Create the circle path for sweep mdb.models['Model-%d' % (q)].ConstrainedSketch(gridSpacing=2.0, name=sketch_name, sheetSize=25.0, transform=mdb.models['Model-%d' % (q)].parts['Part-1'].MakeSketchTransform(sketchPlane=mdb.models['Model-%d' % (q)].parts['Part-1'].datums[dp2.id], sketchPlaneSide=SIDE1, sketchUpEdge=mdb.models['Model-%d' % (q)].parts['Part-1'].edges.findAt((0.0, 0.0, 5.0), ), sketchOrientation=TOP, origin=(x_coordinate[i], y_coordinate[i], z_coordinate[i]))) c_3 = mdb.models['Model-%d' % (q)].sketches[sketch_name].CircleByCenterPerimeter(center=(0, 0), point1=(-inclusion_rad, 0)) # Partitioning for sweep path mdb.models['Model-%d' % (q)].parts['Part-1'].PartitionCellBySketch(cells=mdb.models['Model-%d' % (q)].parts['Part-1'].cells.findAt(((0.2, 0.2, 0.2), )), sketch=mdb.models['Model-%d' % (q)].sketches[sketch_name], sketchOrientation=TOP, sketchPlane=mdb.models['Model-%d' % (q)].parts['Part-1'].datums[dp2.id], sketchUpEdge=mdb.models['Model-%d' % (q)].parts['Part-1'].edges.findAt((0.0, 0.0, 5.0), )) # Delete the sketch after use to avoid duplication del mdb.models['Model-%d' % (q)].sketches[sketch_name] # ================================================ # Main loop for creating models with random inclusions # ================================================ Max_iterations = 4 max_incl = 10 # Number of inclusions set to 10 for q in range(1, Max_iterations): mdb.Model(modelType=STANDARD_EXPLICIT, name='Model-%d' % (q)) # Create geometry and partition for random inclusions x_coordinate, y_coordinate, z_coordinate = random_placement_optimized(max_incl) # Create the partitions and mesh for each inclusion for i in range(max_incl): partition(i, q, x_coordinate, y_coordinate, z_coordinate) # ================================================ # Define Material Properties # ================================================ # Matrix material (Polymer or Concrete) mdb.models['Model-%d' % (q)].Material(name='Matrix') mdb.models['Model-%d' % (q)].materials['Matrix'].Elastic(table=((1e2, 0.47),)) # Elastic Inclusion material mdb.models['Model-%d' % (q)].Material(name='Elastic') mdb.models['Model-%d' % (q)].materials['Elastic'].Elastic(table=((1e3, 0.35),)) # Soft Coating Material mdb.models['Model-%d' % (q)].Material(name='SoftCoating') mdb.models['Model-%d' % (q)].materials['SoftCoating'].Elastic(table=((0.5e3, 0.45),)) # Example values # ================================================ # Create Sections # ================================================ # Assign sections to the matrix and inclusions mdb.models['Model-%d' % (q)].HomogeneousSolidSection(material='Matrix', name='Matrix', thickness=None) mdb.models['Model-%d' % (q)].HomogeneousSolidSection(material='Elastic', name='Inclusion', thickness=None) mdb.models['Model-%d' % (q)].HomogeneousSolidSection(material='SoftCoating', name='Coating', thickness=None) # Assign Sections to Part mdb.models['Model-%d' % (q)].parts['Part-1'].SectionAssignment(offset=0.0, offsetField='', offsetType=MIDDLE_SURFACE, region=Region( cells=mdb.models['Model-%d' % (q)].parts['Part-1'].cells.findAt(((0.1, 0.1, 0.1), ), )), sectionName='Matrix', thicknessAssignment=FROM_SECTION) for i in range(max_incl): mdb.models['Model-%d' % (q)].parts['Part-1'].SectionAssignment(offset=0.0, offsetField='', offsetType=MIDDLE_SURFACE, region=Region( cells=mdb.models['Model-%d' % (q)].parts['Part-1'].cells.findAt(((x_coordinate[i], y_coordinate[i]-0.2*core_rad, z_coordinate[i]+0.2*core_rad), ), )), sectionName='Inclusion', thicknessAssignment=FROM_SECTION) mdb.models['Model-%d' % (q)].parts['Part-1'].SectionAssignment(offset=0.0, offsetField='', offsetType=MIDDLE_SURFACE, region=Region( cells=mdb.models['Model-%d' % (q)].parts['Part-1'].cells.findAt(((x_coordinate[i], y_coordinate[i]+0.2*core_rad, z_coordinate[i]+0.2*core_rad), ), )), sectionName='Coating', thicknessAssignment=FROM_SECTION) # ================================================ # Create Instances # ================================================ mdb.models['Model-%d' % (q)].rootAssembly.DatumCsysByDefault(CARTESIAN) mdb.models['Model-%d' % (q)].rootAssembly.Instance(dependent=ON, name='Part-1-1', part=mdb.models['Model-%d' % (q)].parts['Part-1']) # ================================================ # Create Step # ================================================ mdb.models['Model-%d' % (q)].StaticStep(initialInc=0.01, maxInc=0.1, maxNumInc=10000, minInc=1e-12, name='Step-1', previous='Initial') # ================================================ # Boundary Conditions # ================================================ mdb.models['Model-%d' % (q)].DisplacementBC(amplitude=UNSET, createStepName='Step-1', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None, name= 'BC-1', region=Region( faces=mdb.models['Model-%d' % (q)].rootAssembly.instances['Part-1-1'].faces.findAt( ((0.0, 1.0, 5.0), ), )), u1=0.0, u2=UNSET, u3=UNSET, ur1=UNSET, ur2=UNSET, ur3=UNSET) # ================================================ # Generate Mesh # ================================================ mdb.models['Model-%d' % (q)].parts['Part-1'].generateMesh() # ================================================ # Create Job and Submit # ================================================ mdb.Job(atTime=None, contactPrint=OFF, description='', echoPrint=OFF, explicitPrecision=SINGLE, getMemoryFromAnalysis=True, historyPrint=OFF, memory=90, memoryUnits=PERCENTAGE, model='Model-%d' % (q), modelPrint=OFF, multiprocessingMode=DEFAULT, name='Job-%d' % (q), nodalOutputPrecision=SINGLE, numCpus=1, queue=None, scratch='', type=ANALYSIS, userSubroutine='', waitHours=0, waitMinutes=0) # Submit the job #mdb.jobs['Job-%d' % (q)].submit(consistencyChecking=OFF) #mdb.jobs['Job-%d' % (q)].waitForCompletion() 代码分析,指出存在的错误

接着,增加代码分别给左侧所有节点、中间所有节点、右侧所有节点创建集合,即共三个集合。# – coding: utf-8 – from abaqus import * from abaqusConstants import * from caeModules import * from driverUtils import * import sketch import numpy as np from abaqus import * from abaqusConstants import * import part import os import regionToolset def read_data(filename): """读取数据文件并提取顶点坐标""" with open(filename, 'r') as f: lines = f.readlines() points = [] for line in lines: # 处理可能的空格和制表符分隔符 parts = line.strip().replace('\t', ',').split(',') # 过滤空值 coords = [float(p) for p in parts if p.strip() != ''] if len(coords) >= 2: points.append((coords[0], coords[1])) # 分为三组顶点 (每组31个点) left = points[:31] # 左侧边线上顶点 middle = points[31:62] # 中间边线上顶点 right = points[62:] # 右侧边线上顶点 # 验证数据完整性 if len(left) != 31 or len(middle) != 31 or len(right) != 31: raise ValueError(f"数据点数量错误: 左侧={len(left)}, 中间={len(middle)}, 右侧={len(right)}") return left, middle, right def create_shell_from_points(model, part_name, points1, points2): """ 创建壳部件,由两组点形成封闭多边形 points1: 第一组点(如左侧点) points2: 第二组点(如中间点) """ # 创建草图 sketch_name = f"sketch_{part_name}" my_sketch = model.ConstrainedSketch(name=sketch_name, sheetSize=200.0) # 绘制第一条折线(points1顺序) for i in range(len(points1)-1): pt1 = points1[i] pt2 = points1[i+1] my_sketch.Line(point1=(pt1[0], pt1[1]), point2=(pt2[0], pt2[1])) # 绘制第二条折线(points2逆序) for i in range(len(points2)-1, 0, -1): pt1 = points2[i] pt2 = points2[i-1] my_sketch.Line(point1=(pt1[0], pt1[1]), point2=(pt2[0], pt2[1])) # 连接两端 my_sketch.Line(point1=points1[0], point2=points2[0]) # 起点连接 my_sketch.Line(point1=points1[-1], point2=points2[-1]) # 终点连接 # 创建壳部件 shell_part = model.Part(name=part_name, dimensionality=TWO_D_PLANAR, type=DEFORMABLE_BODY) shell_part.BaseShell(sketch=my_sketch) return shell_part def create_origami_model(): """创建折纸模型的主函数""" # 设置工作目录 work_dir = os.getcwd() os.chdir(work_dir) # 创建新模型 model_name = 'OrigamiModel' if model_name in mdb.models.keys(): del mdb.models[model_name] my_model = mdb.Model(name=model_name) # 读取数据文件 data_file = 'D:/曲纹折纸/文献/Codes/Codes/shujuf1.txt' try: left, middle, right = read_data(data_file) print(f"成功读取数据文件: {len(left)} 左侧点, {len(middle)} 中间点, {len(right)} 右侧点") except Exception as e: print(f"读取数据文件时出错: {str(e)}") return # 创建左侧-中间壳部件 left_middle_shell = create_shell_from_points( my_model, 'LeftMiddleShell', left, middle ) print("成功创建左侧-中间壳部件") # 创建中间-右侧壳部件 middle_right_shell = create_shell_from_points( my_model, 'MiddleRightShell', middle, right ) print("成功创建中间-右侧壳部件") # 创建装配体 my_assembly = my_model.rootAssembly my_assembly.Instance(name='LeftMiddleShell-1', part=left_middle_shell, dependent=ON) my_assembly.Instance(name='MiddleRightShell-1', part=middle_right_shell, dependent=ON) print("成功创建装配体实例") # 执行主函数 create_origami_model() mdb.models['OrigamiModel'].Material(name='Material-1') mdb.models['OrigamiModel'].materials['Material-1'].Density(table=((7890.0, ), )) mdb.models['OrigamiModel'].materials['Material-1'].Elastic(table=((1000000.0, 0.3), )) mdb.models['OrigamiModel'].HomogeneousShellSection(name='Section-1', preIntegrate=OFF, material='Material-1', thicknessType=UNIFORM, thickness=0.05, thicknessField='', nodalThicknessField='', idealization=NO_IDEALIZATION, poissonDefinition=DEFAULT, thicknessModulus=None, temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, numIntPts=5)

我这个脚本网格已经划分完毕,增加代码分别给左侧所有节点、中间所有节点(壳1和壳2)、右侧所有节点创建集合,共4个集合:# – coding: utf-8 – from abaqus import * from abaqusConstants import * from caeModules import * from driverUtils import * import sketch import numpy as np from abaqus import * from abaqusConstants import * import part import os import regionToolset def read_data(filename): “”“读取数据文件并提取顶点坐标”“” with open(filename, ‘r’) as f: lines = f.readlines() points = [] for line in lines: # 处理可能的空格和制表符分隔符 parts = line.strip().replace('\t', ',').split(',') # 过滤空值 coords = [float(p) for p in parts if p.strip() != ''] if len(coords) >= 2: points.append((coords[0], coords[1])) # 分为三组顶点 (每组31个点) left = points[:31] # 左侧边线上顶点 middle = points[31:62] # 中间边线上顶点 right = points[62:] # 右侧边线上顶点 # 验证数据完整性 if len(left) != 31 or len(middle) != 31 or len(right) != 31: raise ValueError(f"数据点数量错误: 左侧={len(left)}, 中间={len(middle)}, 右侧={len(right)}") return left, middle, right def create_shell_from_points(model, part_name, points1, points2): “”" 创建壳部件,由两组点形成封闭多边形 points1: 第一组点(如左侧点) points2: 第二组点(如中间点) “”" # 创建草图 sketch_name = f"sketch_{part_name}" my_sketch = model.ConstrainedSketch(name=sketch_name, sheetSize=200.0) # 绘制第一条折线(points1顺序) for i in range(len(points1)-1): pt1 = points1[i] pt2 = points1[i+1] my_sketch.Line(point1=(pt1[0], pt1[1]), point2=(pt2[0], pt2[1])) # 绘制第二条折线(points2逆序) for i in range(len(points2)-1, 0, -1): pt1 = points2[i] pt2 = points2[i-1] my_sketch.Line(point1=(pt1[0], pt1[1]), point2=(pt2[0], pt2[1])) # 连接两端 my_sketch.Line(point1=points1[0], point2=points2[0]) # 起点连接 my_sketch.Line(point1=points1[-1], point2=points2[-1]) # 终点连接 # 创建壳部件 shell_part = model.Part(name=part_name, dimensionality=THREE_D, type=DEFORMABLE_BODY) shell_part.BaseShell(sketch=my_sketch) return shell_part def create_origami_model(): “”“创建折纸模型的主函数”“” # 设置工作目录 work_dir = os.getcwd() os.chdir(work_dir) # 创建新模型 model_name = 'OrigamiModel' if model_name in mdb.models.keys(): del mdb.models[model_name] my_model = mdb.Model(name=model_name) # 读取数据文件 data_file = 'D:/曲纹折纸/文献/Codes/Codes/shujuf1.txt' try: left, middle, right = read_data(data_file) print(f"成功读取数据文件: {len(left)} 左侧点, {len(middle)} 中间点, {len(right)} 右侧点") except Exception as e: print(f"读取数据文件时出错: {str(e)}") return # 创建左侧-中间壳部件 left_middle_shell = create_shell_from_points( my_model, 'LeftMiddleShell', left, middle ) print("成功创建左侧-中间壳部件") # 创建中间-右侧壳部件 middle_right_shell = create_shell_from_points( my_model, 'MiddleRightShell', middle, right ) print("成功创建中间-右侧壳部件") # 创建装配体 my_assembly = my_model.rootAssembly my_assembly.Instance(name='LeftMiddleShell-1', part=left_middle_shell, dependent=ON) my_assembly.Instance(name='MiddleRightShell-1', part=middle_right_shell, dependent=ON) print("成功创建装配体实例") 执行主函数 create_origami_model() mdb.models[‘OrigamiModel’].Material(name=‘Material-1’) mdb.models[‘OrigamiModel’].materials[‘Material-1’].Density(table=((7890.0, ), )) mdb.models[‘OrigamiModel’].materials[‘Material-1’].Elastic(table=((1000000.0, 0.3), )) mdb.models[‘OrigamiModel’].HomogeneousShellSection(name=‘Section-1’, preIntegrate=OFF, material=‘Material-1’, thicknessType=UNIFORM, thickness=0.05, thicknessField=‘’, nodalThicknessField=‘’, idealization=NO_IDEALIZATION, poissonDefinition=DEFAULT, thicknessModulus=None, temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, numIntPts=5) a = mdb.models[‘OrigamiModel’].rootAssembly a.makeIndependent(instances=(a.instances[‘LeftMiddleShell-1’], )) a = mdb.models[‘OrigamiModel’].rootAssembly a.makeIndependent(instances=(a.instances[‘MiddleRightShell-1’], )) p = mdb.models[‘OrigamiModel’].parts[‘LeftMiddleShell’] f = p.faces faces = f.getSequenceFromMask(mask=(‘[#1 ]’, ), ) region = p.Set(faces=faces, name=‘set-LeftMiddleShell’) p = mdb.models[‘OrigamiModel’].parts[‘LeftMiddleShell’] p.SectionAssignment(region=region, sectionName=‘Section-1’, offset=0.0, offsetType=MIDDLE_SURFACE, offsetField=‘’, thicknessAssignment=FROM_SECTION) p = mdb.models[‘OrigamiModel’].parts[‘MiddleRightShell’] f = p.faces faces = f.getSequenceFromMask(mask=(‘[#1 ]’, ), ) region = p.Set(faces=faces, name=‘set-MiddleRightShell’) p = mdb.models[‘OrigamiModel’].parts[‘MiddleRightShell’] p.SectionAssignment(region=region, sectionName=‘Section-1’, offset=0.0, offsetType=MIDDLE_SURFACE, offsetField=‘’, thicknessAssignment=FROM_SECTION) a = mdb.models[‘OrigamiModel’].rootAssembly e1 = a.instances[‘LeftMiddleShell-1’].edges pickedEdges = e1.getSequenceFromMask(mask=(‘[#ffffffff #3fffffff ]’, ), ) a.seedEdgeByNumber(edges=pickedEdges, number=1, constraint=FINER) a = mdb.models[‘OrigamiModel’].rootAssembly e1 = a.instances[‘MiddleRightShell-1’].edges pickedEdges = e1.getSequenceFromMask(mask=(‘[#ffffffff #3fffffff ]’, ), ) a.seedEdgeByNumber(edges=pickedEdges, number=1, constraint=FINER) a = mdb.models[‘OrigamiModel’].rootAssembly partInstances =(a.instances[‘LeftMiddleShell-1’], a.instances[‘MiddleRightShell-1’], ) a.generateMesh(regions=partInstances)

修改ABAQUS脚本,使得在ABAQUS中绘制两个壳部件,一个壳部件由数据文件的左侧节点和中间节点组成(左侧第一个点和中间第一个点相连,左侧最后一个点和中间最后一个点相连,左侧节点依次相连,中间节点依次相连),壳部件是由1个多边形组成,即左侧节点构成的多段折线,中间节点构成的多段折线,然后两端第一个点和最后一个点相连。另一个壳部件由数据文件的中间节点和右侧节点组成,同理。部分脚本代码:# – coding: utf-8 – from abaqus import * from abaqusConstants import * from caeModules import * from driverUtils import * import sketch import numpy as np from abaqus import * from abaqusConstants import * import part import os import regionToolset def read_data(filename): “”“读取数据文件并提取顶点坐标”“” with open(filename, ‘r’) as f: lines = f.readlines() points = [] for line in lines: # 处理可能的空格和制表符分隔符 parts = line.strip().replace(‘\t’, ‘,’).split(‘,’) # 过滤空值 coords = [float(p) for p in parts if p.strip() != ‘’] if len(coords) >= 2: points.append((coords[0], coords[1])) # 分为三组顶点 (每组31个点) left = points[:31] # 左侧边线上顶点 middle = points[31:62] # 中间边线上顶点 right = points[62:] # 右侧边线上顶点 # 验证数据完整性 if len(left) != 31 or len(middle) != 31 or len(right) != 31: raise ValueError(f"数据点数量错误: 左侧={len(left)}, 中间={len(middle)}, 右侧={len(right)}") return left, middle, right def create_origami_model(): “”“创建折纸模型的主函数”“” 设置工作目录 work_dir = os.getcwd() os.chdir(work_dir) 创建新模型 model_name = ‘OrigamiModel’ if model_name in mdb.models.keys(): del mdb.models[model_name] my_model = mdb.Model(name=model_name) # 读取数据文件 (修改为您的实际文件路径) data_file = ‘D:/曲纹折纸/文献/Codes/Codes/shujuf1.txt’ # 使用正斜杠避免转义问题 try: left, middle, right = read_data(data_file) print(f"成功读取数据文件: {len(left)} 左侧点, {len(middle)} 中间点, {len(right)} 右侧点") except Exception as e: print(f"读取数据文件时出错: {str(e)}") return 数据文件shujuf1:0.000000,0.100000 0.050000,0.100000 0.099999,0.100000 0.149995,0.100002 0.199979,0.100008 0.249939,0.100029 0.299859,0.100079 0.349720,0.100184 0.399494,0.100379 0.449153,0.100715 0.498659,0.101255 0.547972,0.102082 0.597043,0.103296 0.645816,0.105018 0.694224,0.107389 0.742188,0.110572 0.789614,0.114749 0.836387,0.120124 0.882365,0.126915 0.927376,0.135350 0.971205,0.145667 1.013592,0.158094 1.054218,0.172842 1.092701,0.190087 1.128588,0.209945 1.161360,0.232443 1.190435,0.257486 1.215189,0.284819 1.234993,0.313987 1.249269,0.344301 1.257569,0.374819 0.000000,0.000000 0.050000,0.000000 0.100000,0.000000 0.150000,0.000002 0.200000,0.000008 0.250000,0.000029 0.300000,0.000079 0.350000,0.000184 0.399999,0.000381 0.449998,0.000719 0.499995,0.001264 0.549988,0.002102 0.599973,0.003339 0.649942,0.005103 0.699882,0.007549 0.749772,0.010860 0.799579,0.015247 0.849252,0.020955 0.898716,0.028260 0.947860,0.037471 0.996530,0.048927 1.044510,0.062993 1.091509,0.080055 1.137137,0.100503 1.180886,0.124711 1.222107,0.153009 1.259991,0.185640 1.293555,0.222700 1.321641,0.264067 1.342944,0.309302 1.356067,0.357549 0.000000,-0.100000 0.050000,-0.100000 0.100001,-0.100000 0.150005,-0.099998 0.200021,-0.099992 0.250061,-0.099971 0.300140,-0.099921 0.350280,-0.099815 0.400505,-0.099618 0.450844,-0.099278 0.501332,-0.098727 0.552005,-0.097877 0.602903,-0.096618 0.654068,-0.094812 0.705540,-0.092291 0.757356,-0.088852 0.809544,-0.084255 0.862118,-0.078214 0.915066,-0.070394 0.968344,-0.060409 1.021854,-0.047814 1.075428,-0.032107 1.128800,-0.012732 1.181573,0.010918 1.233183,0.039476 1.282854,0.073575 1.329548,0.113794 1.371921,0.160582 1.408290,0.214146 1.436619,0.274302 1.454564,0.340278

改成循环:a1 = mdb.models['OrigamiModel'].rootAssembly a1.DatumCsysByDefault(CARTESIAN) p = mdb.models['OrigamiModel'].parts['Left_Panel_1'] a1.Instance(name='Left_Panel_1-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_2'] a1.Instance(name='Left_Panel_2-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_3'] a1.Instance(name='Left_Panel_3-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_4'] a1.Instance(name='Left_Panel_4-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_5'] a1.Instance(name='Left_Panel_5-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_6'] a1.Instance(name='Left_Panel_6-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_7'] a1.Instance(name='Left_Panel_7-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_8'] a1.Instance(name='Left_Panel_8-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_9'] a1.Instance(name='Left_Panel_9-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_10'] a1.Instance(name='Left_Panel_10-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_11'] a1.Instance(name='Left_Panel_11-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_12'] a1.Instance(name='Left_Panel_12-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_13'] a1.Instance(name='Left_Panel_13-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_14'] a1.Instance(name='Left_Panel_14-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_15'] a1.Instance(name='Left_Panel_15-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_16'] a1.Instance(name='Left_Panel_16-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_17'] a1.Instance(name='Left_Panel_17-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_18'] a1.Instance(name='Left_Panel_18-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_19'] a1.Instance(name='Left_Panel_19-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_20'] a1.Instance(name='Left_Panel_20-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_21'] a1.Instance(name='Left_Panel_21-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_22'] a1.Instance(name='Left_Panel_22-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_23'] a1.Instance(name='Left_Panel_23-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_24'] a1.Instance(name='Left_Panel_24-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_25'] a1.Instance(name='Left_Panel_25-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_26'] a1.Instance(name='Left_Panel_26-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_27'] a1.Instance(name='Left_Panel_27-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_28'] a1.Instance(name='Left_Panel_28-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_29'] a1.Instance(name='Left_Panel_29-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_Panel_30'] a1.Instance(name='Left_Panel_30-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_1'] a1.Instance(name='Left_to_Middle_1-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_2'] a1.Instance(name='Left_to_Middle_2-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_3'] a1.Instance(name='Left_to_Middle_3-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_4'] a1.Instance(name='Left_to_Middle_4-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_5'] a1.Instance(name='Left_to_Middle_5-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_6'] a1.Instance(name='Left_to_Middle_6-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_7'] a1.Instance(name='Left_to_Middle_7-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_8'] a1.Instance(name='Left_to_Middle_8-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_9'] a1.Instance(name='Left_to_Middle_9-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_10'] a1.Instance(name='Left_to_Middle_10-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_11'] a1.Instance(name='Left_to_Middle_11-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_12'] a1.Instance(name='Left_to_Middle_12-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_13'] a1.Instance(name='Left_to_Middle_13-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_14'] a1.Instance(name='Left_to_Middle_14-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_15'] a1.Instance(name='Left_to_Middle_15-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_16'] a1.Instance(name='Left_to_Middle_16-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_17'] a1.Instance(name='Left_to_Middle_17-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_18'] a1.Instance(name='Left_to_Middle_18-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_19'] a1.Instance(name='Left_to_Middle_19-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_20'] a1.Instance(name='Left_to_Middle_20-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_21'] a1.Instance(name='Left_to_Middle_21-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_22'] a1.Instance(name='Left_to_Middle_22-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_23'] a1.Instance(name='Left_to_Middle_23-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_24'] a1.Instance(name='Left_to_Middle_24-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_25'] a1.Instance(name='Left_to_Middle_25-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_26'] a1.Instance(name='Left_to_Middle_26-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_27'] a1.Instance(name='Left_to_Middle_27-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_28'] a1.Instance(name='Left_to_Middle_28-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Left_to_Middle_29'] a1.Instance(name='Left_to_Middle_29-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_1'] a1.Instance(name='Middle_Segment_1-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_2'] a1.Instance(name='Middle_Segment_2-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_3'] a1.Instance(name='Middle_Segment_3-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_4'] a1.Instance(name='Middle_Segment_4-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_5'] a1.Instance(name='Middle_Segment_5-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_6'] a1.Instance(name='Middle_Segment_6-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_7'] a1.Instance(name='Middle_Segment_7-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_8'] a1.Instance(name='Middle_Segment_8-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_9'] a1.Instance(name='Middle_Segment_9-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_10'] a1.Instance(name='Middle_Segment_10-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_11'] a1.Instance(name='Middle_Segment_11-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_12'] a1.Instance(name='Middle_Segment_12-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_13'] a1.Instance(name='Middle_Segment_13-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_14'] a1.Instance(name='Middle_Segment_14-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_15'] a1.Instance(name='Middle_Segment_15-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_16'] a1.Instance(name='Middle_Segment_16-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_17'] a1.Instance(name='Middle_Segment_17-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_18'] a1.Instance(name='Middle_Segment_18-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_19'] a1.Instance(name='Middle_Segment_19-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_20'] a1.Instance(name='Middle_Segment_20-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_21'] a1.Instance(name='Middle_Segment_21-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_22'] a1.Instance(name='Middle_Segment_22-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_23'] a1.Instance(name='Middle_Segment_23-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_24'] a1.Instance(name='Middle_Segment_24-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_25'] a1.Instance(name='Middle_Segment_25-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_26'] a1.Instance(name='Middle_Segment_26-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_27'] a1.Instance(name='Middle_Segment_27-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_28'] a1.Instance(name='Middle_Segment_28-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_29'] a1.Instance(name='Middle_Segment_29-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_Segment_30'] a1.Instance(name='Middle_Segment_30-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_1'] a1.Instance(name='Middle_to_Right_1-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_2'] a1.Instance(name='Middle_to_Right_2-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_3'] a1.Instance(name='Middle_to_Right_3-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_4'] a1.Instance(name='Middle_to_Right_4-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_5'] a1.Instance(name='Middle_to_Right_5-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_6'] a1.Instance(name='Middle_to_Right_6-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_7'] a1.Instance(name='Middle_to_Right_7-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_8'] a1.Instance(name='Middle_to_Right_8-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_9'] a1.Instance(name='Middle_to_Right_9-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_10'] a1.Instance(name='Middle_to_Right_10-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_11'] a1.Instance(name='Middle_to_Right_11-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_12'] a1.Instance(name='Middle_to_Right_12-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_13'] a1.Instance(name='Middle_to_Right_13-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_14'] a1.Instance(name='Middle_to_Right_14-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_15'] a1.Instance(name='Middle_to_Right_15-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_16'] a1.Instance(name='Middle_to_Right_16-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_17'] a1.Instance(name='Middle_to_Right_17-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_18'] a1.Instance(name='Middle_to_Right_18-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_19'] a1.Instance(name='Middle_to_Right_19-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_20'] a1.Instance(name='Middle_to_Right_20-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_21'] a1.Instance(name='Middle_to_Right_21-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_22'] a1.Instance(name='Middle_to_Right_22-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_23'] a1.Instance(name='Middle_to_Right_23-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_24'] a1.Instance(name='Middle_to_Right_24-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_25'] a1.Instance(name='Middle_to_Right_25-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_26'] a1.Instance(name='Middle_to_Right_26-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_27'] a1.Instance(name='Middle_to_Right_27-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_28'] a1.Instance(name='Middle_to_Right_28-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Middle_to_Right_29'] a1.Instance(name='Middle_to_Right_29-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_1'] a1.Instance(name='Right_Panel_1-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_2'] a1.Instance(name='Right_Panel_2-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_3'] a1.Instance(name='Right_Panel_3-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_4'] a1.Instance(name='Right_Panel_4-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_5'] a1.Instance(name='Right_Panel_5-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_6'] a1.Instance(name='Right_Panel_6-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_7'] a1.Instance(name='Right_Panel_7-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_8'] a1.Instance(name='Right_Panel_8-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_9'] a1.Instance(name='Right_Panel_9-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_10'] a1.Instance(name='Right_Panel_10-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_11'] a1.Instance(name='Right_Panel_11-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_12'] a1.Instance(name='Right_Panel_12-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_13'] a1.Instance(name='Right_Panel_13-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_14'] a1.Instance(name='Right_Panel_14-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_15'] a1.Instance(name='Right_Panel_15-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_16'] a1.Instance(name='Right_Panel_16-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_17'] a1.Instance(name='Right_Panel_17-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_18'] a1.Instance(name='Right_Panel_18-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_19'] a1.Instance(name='Right_Panel_19-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_20'] a1.Instance(name='Right_Panel_20-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_21'] a1.Instance(name='Right_Panel_21-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_22'] a1.Instance(name='Right_Panel_22-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_23'] a1.Instance(name='Right_Panel_23-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_24'] a1.Instance(name='Right_Panel_24-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_25'] a1.Instance(name='Right_Panel_25-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_26'] a1.Instance(name='Right_Panel_26-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_27'] a1.Instance(name='Right_Panel_27-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_28'] a1.Instance(name='Right_Panel_28-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_29'] a1.Instance(name='Right_Panel_29-1', part=p, dependent=OFF) p = mdb.models['OrigamiModel'].parts['Right_Panel_30'] a1.Instance(name='Right_Panel_30-1', part=p, dependent=OFF)

大家在看

recommend-type

tibco rv 发送与接收Demo

Tibco rv sender && Receiver .net3.5 .net4.0
recommend-type

只输入固定-vc实现windows多显示器编程的方法

P0.0 只输入固定 P0.1 P0CON.1 P0.2 P0CON.2 PORT_SET.PORT_REFEN P0.3 P0CON.3 自动“偷”从C2的交易应用程序在. PORT_SET.PORT_CLKEN PORT_SET.PORT_CLKOUT[0] P0.4 P0CON.4 C2调试的LED驱动器的时钟输入,如果作为 未启用. P0.5 PORT_CTRL.PORT_LED[1:0] 输出港口被迫为.阅读 实际LED驱动器的状态(开/关) 用户应阅读 RBIT_DATA.GPIO_LED_DRIVE 14只脚 不能用于在开发系统中,由于C2交易扰 乱输出. 参考区间的时钟频率 对抗 控制控制 评论评论 NVM的编程电压 VPP = 6.5 V 矩阵,和ROFF工业* PORT_CTRL 2 GPIO 1 矩阵,和ROFF工业* PORT_CTRL 3 参考 clk_ref GPIO 矩阵 4 C2DAT 产量 CLK_OUT GPIO 5 C2CLK LED驱动器 1 2 工业* PORT_CTRL 1 2 3 1 2 6 产量 CLK_OUT GPIO 1 2 1 1 1 PORT_SET.PORT_CLKEN PORT_SET.PORT_CLKOUT[1] P0.6 P0CON.6 P0.7 P0CON.7 P1.0 P1CON.0 P1.1 P1CON.1 7 8 9 GPIO GPIO GPIO 14只脚 14只脚 14只脚 *注:工业注:工业 代表“独立报”设置. “ 矩阵矩阵 and Roff 模式控制模拟垫电路. 116 修订版修订版1.0
recommend-type

声纹识别数据集 IDMT-ISA-ELECTRIC-ENGINE

包含发动机正常、高负荷、损坏三种状态.wav声音片段,每种状态包含几百个片段,每个片段时长3S,可用于声纹类型识别,包含数据集介绍文档。
recommend-type

思源黑体、简体、中文全套TTF格式

思源黑体、简体、中文全套TTF格式
recommend-type

实体消歧系列文章.rar

实体消歧系列文章.rar

最新推荐

recommend-type

美国职业棒球大联盟历史数据SQL数据库项目-19世纪至今的棒球比赛数据球队信息球员统计127个CSV文件相互关联-用于存储查询分析美国职业棒球大联盟从19世纪至今的完整历史数据支持.zip

fpga美国职业棒球大联盟历史数据SQL数据库项目_19世纪至今的棒球比赛数据球队信息球员统计127个CSV文件相互关联_用于存储查询分析美国职业棒球大联盟从19世纪至今的完整历史数据支持.zip
recommend-type

pyjson5-0.9.1-1.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

探寻数学活动经验的本质-助力学生深度学习.doc

探寻数学活动经验的本质-助力学生深度学习.doc
recommend-type

SSRSSubscriptionManager工具:简化SSRS订阅的XML文件导入

### 知识点概述 #### 标题知识点 1. **SSRSSubscriptionManager**: 这是一个专门用于管理SQL Server Reporting Services (SSRS) 订阅的工具或脚本。它允许用户从一个集中的位置管理SSRS订阅。 2. **从XML文件导入SSRS订阅**: 描述了一个通过读取XML文件来配置SSRS订阅的过程。这可能是为了减少重复的手动设置和避免错误,提高管理效率。 #### 描述知识点 3. **快速部署多个SSRS订阅**: 该工具或脚本的一个主要功能是能够快速设置多个订阅,这比传统的SSRS在线向导更为高效。 4. **标准SSRS在线向导的局限性**: 描述了标准SSRS向导的不足之处,例如操作缓慢、单次只能设置一个订阅,以及易于出现人为错误。 5. **SSRS订阅管理器的优势**: 解释了为什么使用SSRS订阅管理器比标准向导更可靠。它允许使用预定义的XML文档进行设置,这些文档可以经过测试和验证以减少错误。 6. **受控文档**: 强调了使用SSRS订阅管理器的一个好处是能够控制订阅设置,使其更为可靠且易于管理。 7. **版本控制和订阅设置**: 讨论了SSRS报告可以进行版本控制,但是传统的订阅设置通常不包含在版本控制中,而SSRS订阅管理器提供了一种方式,可以对这些设置进行记录和控制。 #### 标签知识点 8. **C#**: 指示了实现SSRSSubscriptionManager可能使用的技术,C# 是一种面向对象的编程语言,通常用于开发.NET应用程序,包括SSRS订阅管理器。 #### 压缩包子文件名列表 9. **SSRSSubscriptionManager-master**: 表示这是一个开源项目或组件的主干文件夹。名称表明这是一个版本控制仓库中的主分支,可能包含了源代码、项目文件和其他资源文件。 ### 详细知识点 #### 关于SSRS - SQL Server Reporting Services (SSRS) 是一个服务器基础的报告平台,它能够通过Web界面、文件共享和电子邮件来交付报表内容。SSRS用户可以根据数据源生成数据驱动的报表,并设置订阅以便自动分发这些报表。 - SSRS订阅是一个功能,允许用户根据设定的计划或用户触发条件自动获取报表。订阅可以是快照订阅、数据驱动订阅或基于事件的订阅。 #### 关于SSRSSubscriptionManager - SSRSSubscriptionManager是一个工具,其设计意图是简化SSRS订阅的管理过程。它允许管理员在单个操作中部署大量订阅,相比于传统方法,它极大地节省了时间。 - 通过使用XML文件来定义订阅的设置,该工具提供了更高的准确性和一致性,因为XML文件可以被严格地测试和审核。 - 自动化和批量操作可以减少因手动设置造成的错误,并且提高了操作效率。这对于有大量报表和订阅需求的企业来说尤为重要。 - SSRSSubscriptionManager的出现也表明了开发人员对IT自动化、脚本化操作和管理工具的需求,这可以视为一种持续的向DevOps文化和实践的推进。 #### 关于C# - C# 是一种由微软开发的通用编程语言,它被广泛应用于开发Windows应用程序、服务器端Web应用程序以及移动和游戏开发。 - 在开发SSRSSubscriptionManager时,C# 语言的利用可能涉及到多种.NET框架中的类库,例如System.Xml用于解析和操作XML文件,System.Data用于数据库操作等。 - 使用C# 实现SSRS订阅管理器可以享受到.NET平台的诸多优势,比如类型安全、内存管理和跨平台兼容性。 #### 关于版本控制 - 版本控制是一种记录源代码文件更改历史的方法,它允许开发团队追踪和管理代码随时间的变化。常见的版本控制系统包括Git、Subversion等。 - 在SSRS订阅的上下文中,版本控制意味着可以追踪每个订阅设置的变更,从而保证订阅设置的一致性和可追溯性。 - SSRSSubscriptionManager通过使用XML文件,可以使得版本控制变得更加容易,因为XML文件可以被版本控制系统跟踪。 - 这种做法还确保了订阅设置文件的历史版本可以被审计,对企业的合规性和管理都有积极影响。 ### 结论 SSRSSubscriptionManager通过集成自动化、XML文件和版本控制,为SSRS订阅管理提供了更高效、可信赖和可管理的解决方案。使用C# 实现的这一工具能够极大提高IT专业人员在创建和维护SSRS订阅时的工作效率,并减少可能由手工操作引入的错误。通过强调自动化和可控制的文档处理,它也反映了IT行业的趋势,即追求效率、可靠性和版本管理。
recommend-type

图形缩放与平移实现全攻略:Delphi视图变换核心技术详解

# 摘要 本文系统探讨了图形缩放与平移技术的基本原理及其在实际开发中的应用,涵盖从数学基础到编程实现的全过程。文章首先介绍了图形变换的数学模型,包括坐标系统、矩
recommend-type

Unknown custom element: <CustomForm> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

在使用 Vue.js 时,如果遇到未知自定义组件 `<CustomForm>` 的错误提示,通常是由于组件注册过程中存在某些疏漏或错误。以下是常见的原因及对应的解决方案: ### 1. 组件未正确注册 确保 `<CustomForm>` 组件已经在使用它的父组件或全局中进行了注册。如果未注册,Vue 会提示该组件是未知的。 正确的注册方式如下: - **全局注册**(适用于所有组件都能访问的场景): ```javascript import CustomForm from '@/components/CustomForm.vue' Vue.component('CustomForm',
recommend-type

使用KnockoutJS开发的黑客新闻阅读器 hn-ko

在给定的文件信息中,我们可以提炼出以下IT相关知识点: ### 标题知识点 #### KnockoutJS - **KnockoutJS定义**:Knockout是一个轻量级的JavaScript库,它允许开发者利用声明式绑定方式创建富交互的Web应用程序。它特别擅长于实现UI的自动更新,当模型的数据发生变化时,视图会自动响应这些变化而更新,无需手动操作DOM。 - **KnockoutJS核心特性**: - **依赖项跟踪**:Knockout能够跟踪数据模型中的变化,当数据更新时自动更新相关联的UI元素。 - **声明式绑定**:开发者可以使用简单的数据绑定语法在HTML标记中直接指定数据与DOM元素之间的关系,这样可以使代码更加清晰和易于维护。 - **模板和自定义绑定**:Knockout提供了灵活的模板系统,可以创建可复用的UI组件,并通过自定义绑定来扩展其核心功能,以满足特定需求。 - **组件化**:Knockout支持创建独立的、可复用的视图模型组件,以构建复杂的用户界面。 ### 描述知识点 #### 入门和运行应用 - **Git克隆**:通过`git clone`命令可以从远程仓库克隆代码到本地环境,这是版本控制中常见的操作,有助于团队协作和代码共享。`https://github.com/crissdev/hn-ko.git`指向一个特定的GitHub仓库,其中包含着使用KnockoutJS编写的黑客新闻应用代码。 - **NPM(Node Package Manager)**:NPM是随Node.js一起安装的一个包管理工具,它用于安装和管理JavaScript项目依赖。`npm install`命令用于安装项目中的所有依赖项,这可能包括KnockoutJS库以及其他可能用到的库或框架。 - **启动应用**:`npm start`是启动脚本的命令,它通常在`package.json`文件的scripts部分定义,用以启动开发服务器或运行应用。 #### 麻省理工学院许可证 - **MIT许可证**:这是一种常见的开源许可证,允许用户在任何类型的项目中免费使用软件,无论是个人的还是商业的。在保留原作者版权声明的同时,用户可以根据自己的需要修改和分发代码。这是很多开源项目选择的许可证。 ### 标签知识点 #### JavaScript - **JavaScript作用**:JavaScript是一种高级的、解释执行的编程语言,它通常是运行在浏览器中的脚本语言,用于实现网页的动态效果和用户交互。JavaScript作为全栈开发的关键技术之一,也被广泛用于服务器端开发(Node.js)。 - **JavaScript特点**: - **事件驱动**:JavaScript可以响应用户的点击、输入等事件,并据此进行操作。 - **对象导向**:JavaScript支持面向对象编程,可以通过创建对象、继承、多态等特性来组织代码。 - **异步编程**:JavaScript支持异步编程模型,利用回调函数、Promises、async/await等技术,可以有效处理网络请求、用户输入等异步操作。 ### 压缩包子文件的文件名称列表知识点 - **hn-ko-master**:这表明压缩包中的文件是从名为`hn-ko`的GitHub仓库的`master`分支获取的。文件列表中的这个名称可以帮助开发者快速识别包含KnockoutJS项目的代码仓库版本。 ### 总结 以上知识点总结了文件信息中提及的关于KnockoutJS、Git、NPM、MIT许可证和JavaScript的核心概念和应用实践。KnockoutJS作为一个功能强大的前端库,特别适用于复杂用户界面的数据绑定和动态更新。而通过Git的使用可以方便地管理项目的版本,并与其他开发者协作。NPM则使得项目的依赖管理和模块化开发变得更加简单高效。MIT许可证为项目的使用者提供了法律上的许可,确保了软件使用的自由度。JavaScript作为一种多用途的编程语言,在前端开发中扮演了不可替代的角色。理解并运用这些知识点,将有助于进行现代Web应用的开发工作。
recommend-type

Delphi图层管理机制设计:打造高效绘图控件的架构之道

# 摘要 本文系统研究了Delphi图层管理机制的核心概念、理论基础与实现细节,重点分析了图层的数据模型、渲染流程及其交互机制。通过对图层容器设计、绘制性能优化与事件分发模型的深入探讨,提出了一个高效、可扩展的图层管理架构,并结合实际绘图控件开发,验证了该机制
recommend-type

激光slam14讲

激光SLAM(Simultaneous Localization and Mapping,同步定位与地图构建)是机器人领域中的关键技术之一,广泛应用于室内机器人、自动驾驶、无人机导航等领域。对于初学者来说,系统地学习相关理论和实践方法是入门的关键。以下是一些推荐的学习资料和学习路径,帮助你更好地掌握激光SLAM。 ### 推荐书籍与资料 1. **《视觉SLAM十四讲》**:虽然书名强调“视觉”,但其中的许多核心理论,如贝叶斯估计、卡尔曼滤波、因子图优化等,与激光SLAM有高度重合,是入门SLAM的必备读物。 2. **《概率机器人》**:这本书是SLAM领域的经典教材,深入讲解了粒子滤
recommend-type

星云Dapp加密游戏深度解析与实践指南

### 星云的Dapp加密游戏知识点梳理 #### 标题解读 标题“dapp-crypto-game:星云的Dapp加密游戏”中的“dapp”指的是“Decentralized Application”,即去中心化应用。而“crypto-game”则表示这是一款基于加密货币技术的游戏,它可能涉及到区块链技术、加密资产交易、智能合约等元素。而“星云”可能是游戏的名称或者主题背景,但没有更多的信息,我们无法得知它是否指一个特定的区块链项目。 #### 描述解读 描述中的“星云的Dapp加密游戏”是一个简短的说明,它指明了这是一个与星云相关主题的去中心化应用程序,并且是一款游戏。描述信息过于简洁,没有提供具体的游戏玩法、加密技术的应用细节等关键信息。 #### 标签解读 标签“JavaScript”说明该Dapp游戏的前端或后端开发可能使用了JavaScript语言。JavaScript是一种广泛应用于网页开发的脚本语言,它也是Node.js的基础,Node.js是一种运行在服务器端的JavaScript环境,使得JavaScript能够用于开发服务器端应用程序。在区块链和Dapp开发领域,JavaScript及其相关的开发工具库(如web3.js)是与以太坊等智能合约平台交互的重要技术。 #### 文件名称解读 文件名称“dapp-crypto-game-master”表明这是一个包含Dapp游戏源代码的压缩包,并且该压缩包内包含了一个“master”目录。这通常意味着它是一个版本控制系统(如Git)中的主分支或主版本的代码。开发者可能会使用这种命名习惯来区分不同的开发阶段,如开发版、测试版和稳定版。 #### 知识点详细说明 1. **区块链技术与加密游戏**:Dapp加密游戏通常建立在区块链技术之上,允许玩家拥有独一无二的游戏资产,这些资产可以是游戏内的货币、道具或者角色,它们以加密货币或代币的形式存在,并储存在区块链上。区块链提供的不可篡改性和透明性,使得游戏资产的安全性和真实性得以保障。 2. **智能合约**:智能合约是区块链上自动执行、控制或文档化相关事件和动作的计算机程序。在Dapp加密游戏中,智能合约可以用来定义游戏规则,自动结算比赛胜负,分发游戏奖励等。智能合约的编写通常涉及专门的编程语言,如Solidity。 3. **加密货币**:加密游戏可能会用到各种类型的加密货币,包括但不限于比特币、以太币、ERC20或ERC721代币。在区块链游戏中,玩家可能需要使用这些货币来购买游戏内资产、参与游戏或赚取收益。 4. **JavaScript在Dapp开发中的应用**:由于区块链技术在前端的应用需要与用户进行交云,JavaScript在Dapp的前端开发中扮演重要角色。web3.js等库让JavaScript能够与区块链进行通信,使得开发人员能够构建用户界面,与智能合约进行交互。 5. **去中心化应用(Dapp)的特性**:Dapp的一个核心特性是它们不是由单一实体控制的。用户可以在不受第三方干涉的情况下运行或访问Dapp。这样的开放性和去中心化给用户带来了自由度,但同时也带来了安全性和法律方面的新挑战。 6. **版本控制**:使用版本控制系统的“master”分支来组织代码是一种常见的实践,它保证了项目的主版本代码是最稳定的。在多人协作的项目中,“master”分支往往只允许合并已经过测试和审查的代码。 7. **开发环境搭建**:对于想要开发Dapp的开发者来说,他们需要搭建适当的开发环境,包括安装Node.js和相应的库,如web3.js,以与区块链进行交互,以及可能的开发工具和IDE(如Truffle, Remix, Visual Studio Code)。 8. **安全性考虑**:在开发Dapp加密游戏时,安全是非常重要的考量。游戏开发者需要对智能合约进行安全审计,防止漏洞被利用导致玩家资产被盗,以及确保游戏的公平性和稳定性。 #### 结语 以上就是对“dapp-crypto-game:星云的Dapp加密游戏”相关知识点的详细解读。概括来说,一个加密游戏Dapp的开发涉及到区块链技术、智能合约、加密货币以及前端开发技术等多个领域。随着区块链技术的不断成熟和普及,越来越多的开发者将参与到Dapp游戏的开发中来,为用户提供全新的去中心化游戏体验。