版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工业机器人编程语言:ASLanguage(Kawasaki):ASLanguage高级编程技巧1绪论1.1ASLanguage编程语言简介ASLanguage是川崎机器人(Kawasaki)专为工业机器人设计的一种编程语言,它提供了一套完整的指令集,用于控制机器人的运动、处理传感器数据、执行复杂的任务序列。ASLanguage的设计理念是简化编程流程,使用户能够快速、准确地编写机器人控制程序,同时保证程序的稳定性和安全性。1.1.1特点直观的指令集:ASLanguage的指令集设计直观,易于理解和记忆,包括基本的运动控制、逻辑控制、数据处理等。强大的数据处理能力:支持多种数据类型,包括整数、浮点数、字符串和数组,能够进行复杂的数学运算和数据处理。灵活的编程结构:支持循环、条件判断、子程序调用等高级编程结构,使得程序设计更加灵活和高效。实时监控与调试:ASLanguage编程环境提供了实时监控和调试工具,帮助程序员快速定位和解决问题。1.2工业机器人编程的重要性在现代制造业中,工业机器人扮演着越来越重要的角色,它们能够执行重复性高、精度要求严、环境恶劣的任务,极大地提高了生产效率和产品质量。工业机器人编程是实现机器人自动化控制的关键,它决定了机器人如何执行任务、如何与环境交互、如何处理异常情况。良好的编程技巧不仅能够提升机器人的工作效率,还能确保生产过程的安全性和稳定性。1.3Kawasaki机器人ASLanguage的独特之处川崎机器人在设计ASLanguage时,特别注重了与机器人硬件的紧密集成,以及对工业应用的适应性。以下是ASLanguage的一些独特之处:1.3.1硬件集成ASLanguage直接与川崎机器人的硬件系统通信,能够精确控制机器人的每一个关节,实现微米级别的定位精度。此外,它还支持与外部设备的通信,如PLC、传感器和视觉系统,使得机器人能够更好地融入生产线中。1.3.2工业应用适应性ASLanguage内置了多种工业标准协议,如EtherCAT、Profinet和DeviceNet,使得机器人能够无缝连接到不同的工业网络中。它还提供了丰富的I/O控制指令,便于处理复杂的工业现场信号。1.3.3示例:机器人运动控制;机器人运动到指定位置
MoveLP1,v100,z10,tool0;
;读取机器人当前位置
Pos:=Cpos();
;计算并移动到新位置
P2:=P1+[100,0,0,0,0,0];
MoveLP2,v100,z10,tool0;在上述示例中,MoveL指令用于控制机器人线性移动到指定位置,Cpos()函数用于读取机器人当前的位置信息,而+运算符则用于计算新的位置。这些指令和函数的组合,展示了ASLanguage在机器人运动控制方面的强大功能。1.3.4数据处理与逻辑控制ASLanguage支持多种数据类型和数据处理指令,如数学运算、字符串处理和数组操作。同时,它也提供了丰富的逻辑控制结构,如IF语句和WHILE循环,使得程序设计更加灵活。1.3.5示例:条件判断与循环;初始化计数器
Counter:=0;
;循环执行直到计数器达到10
WHILECounter<10DO
;执行任务
Task();
;增加计数器
Counter:=Counter+1;
ENDWHILE;
;检查传感器状态
IFSensorStatus=1THEN
;执行特定任务
SpecificTask();
ENDIF;在以上示例中,WHILE循环用于重复执行任务直到满足特定条件,IF语句则用于根据传感器的状态执行不同的任务。这些控制结构的使用,展示了ASLanguage在处理复杂逻辑和数据时的能力。通过以上介绍,我们可以看到ASLanguage不仅是一种编程语言,更是川崎机器人与工业应用之间的重要桥梁。掌握ASLanguage的高级编程技巧,对于提升工业机器人的自动化水平和生产效率具有重要意义。2工业机器人编程语言:ASLanguage(Kawasaki)高级编程技巧2.1基础编程概念2.1.1变量与数据类型在ASLanguage中,变量是存储数据的容器,它们可以保存各种类型的信息,如数字、字符串或布尔值。理解变量和数据类型是编程的基础,它帮助我们有效地管理和操作数据。2.1.1.1数据类型ASLanguage支持以下几种基本数据类型:整型(INT):用于存储整数。实型(REAL):用于存储实数或浮点数。字符串(STRING):用于存储文本数据。布尔型(BOOL):用于存储逻辑值,真或假。2.1.1.2变量定义变量定义包括指定变量的名称和类型。例如:VARnum1:INT;//定义一个整型变量
VARstrName:STRING;//定义一个字符串变量2.1.1.3变量赋值变量可以通过赋值语句来设置其值。例如:num1:=10;//给整型变量赋值
strName:="KawasakiRobot";//给字符串变量赋值2.1.2控制结构详解控制结构允许程序根据不同的条件执行不同的代码路径,或重复执行一段代码。ASLanguage提供了几种控制结构,包括条件语句和循环语句。2.1.2.1条件语句条件语句(IF…THEN…ELSE)用于基于条件执行代码。例如:VARx:INT:=5;
IFx>0THEN
WRITE("xispositive");
ELSE
WRITE("xisnotpositive");
ENDIF;在这个例子中,程序首先检查变量x是否大于0。如果是,它将输出“xispositive”。否则,它将输出“xisnotpositive”。2.1.2.2循环语句循环语句允许代码块被重复执行。ASLanguage支持几种类型的循环,包括FOR循环和WHILE循环。2.1.2.2.1FOR循环FOR循环用于在已知次数的情况下重复执行代码。例如:FORi:=1TO10DO
WRITE(i);
ENDFOR;这段代码将从1到10输出数字。2.1.2.2.2WHILE循环WHILE循环在条件为真时重复执行代码。例如:VARi:INT:=1;
WHILEi<=5DO
WRITE(i);
i:=i+1;
ENDWHILE;这段代码将输出从1到5的数字,直到i大于5为止。2.1.3函数与子程序的定义与使用函数和子程序是可重用的代码块,它们可以接受输入参数并返回结果(函数)或执行特定任务(子程序)。2.1.3.1函数定义函数定义包括函数名、参数列表和返回类型。例如:FUNCTIONaddNumbers(a:INT;b:INT):INT;
RETURNa+b;
ENDFUNCTION;这个函数接受两个整型参数a和b,并返回它们的和。2.1.3.2函数调用函数调用是通过函数名和传递参数来执行函数。例如:VARresult:INT;
result:=addNumbers(5,3);
WRITE(result);//输出82.1.3.3子程序定义子程序定义包括子程序名和参数列表,但不包括返回类型。例如:SUBROUTINEprintHello(name:STRING);
WRITE("Hello,"+name);
ENDSUBROUTINE;这个子程序接受一个字符串参数name,并打印一条问候消息。2.1.3.4子程序调用子程序调用是通过子程序名和传递参数来执行子程序。例如:printHello("Kawasaki");这段代码将输出“Hello,Kawasaki”。通过掌握这些基础编程概念,您可以开始使用ASLanguage进行更复杂的编程任务,如机器人路径规划、传感器数据处理和自动化任务的实现。继续深入学习,探索ASLanguage的更多高级功能和技巧。3高级编程技巧3.1模块化编程策略在工业机器人编程中,使用ASLanguage进行模块化编程可以显著提高代码的可读性和可维护性。模块化意味着将程序分解为独立的、可重用的代码块,每个模块负责执行特定的功能。这种策略有助于避免代码重复,简化复杂任务,同时也便于团队协作和代码的长期维护。3.1.1示例:创建模块化程序假设我们需要编写一个程序,用于控制Kawasaki机器人的抓取和放置操作。我们可以将这个程序分解为几个模块,如抓取模块、移动模块和放置模块。//抓取模块
MODULEGrabObject
PROCEDUREExecute
//机器人移动到抓取位置
MoveToPosition(GrabPosition)
//打开夹爪
OpenGripper()
//下降并抓取物体
MoveToPosition(GrabPosition-100)
CloseGripper()
//移回至安全位置
MoveToPosition(SafePosition)
END_PROCEDURE
END_MODULE
//移动模块
MODULEMoveObject
PROCEDUREExecute
//读取目标位置
TargetPosition:=ReadTargetPosition()
//移动到目标位置
MoveToPosition(TargetPosition)
END_PROCEDURE
END_MODULE
//放置模块
MODULEPlaceObject
PROCEDUREExecute
//移动到放置位置
MoveToPosition(PlacePosition)
//打开夹爪,放置物体
OpenGripper()
//移回至安全位置
MoveToPosition(SafePosition)
END_PROCEDURE
END_MODULE在主程序中,我们可以简单地调用这些模块,而无需关心每个模块内部的细节。//主程序
PROCEDUREMain
//初始化安全位置
SafePosition:={0,0,500,0,0,0}
//初始化抓取位置
GrabPosition:={100,0,300,0,0,0}
//初始化放置位置
PlacePosition:={200,0,300,0,0,0}
//调用模块
GrabObject.Execute()
MoveObject.Execute()
PlaceObject.Execute()
END_PROCEDURE3.1.2优点代码重用:模块可以被多个程序调用,减少了代码的重复编写。易于维护:每个模块独立,修改一个模块不会影响其他模块。团队协作:不同的团队成员可以同时开发不同的模块,提高了开发效率。3.2错误处理与调试技巧在ASLanguage编程中,错误处理和调试是确保程序稳定运行的关键。通过合理地处理错误和使用调试技巧,可以快速定位问题,避免生产中断。3.2.1示例:错误处理PROCEDUREMoveToPosition(Position)
TRY
//执行移动指令
Robot.Move(Position)
CATCHError
//错误处理
LogError("移动到位置失败:"+Error.Message)
//重置机器人到安全位置
Robot.Move(SafePosition)
END_CATCH
END_PROCEDURE3.2.2调试技巧使用日志:在关键位置添加日志输出,记录程序状态和变量值。逐步执行:使用调试器逐步执行程序,观察每一步的执行结果。断点设置:在疑似出错的代码行设置断点,暂停执行以检查变量状态。3.3优化代码性能的方法在工业控制环境中,代码性能直接影响到机器人的响应速度和生产效率。通过优化代码,可以减少执行时间,提高生产率。3.3.1示例:循环优化假设我们有一个循环,用于检查机器人是否到达指定位置。//未优化的循环
WHILENOTRobot.IsAtPosition(TargetPosition)
WAIT0.1//等待0.1秒
END_WHILE优化后的代码可以使用WAIT_UNTIL指令,这将更高效地等待条件满足。//优化后的循环
WAIT_UNTILRobot.IsAtPosition(TargetPosition)3.3.2其他优化策略减少不必要的计算:避免在循环中进行复杂的计算,将计算移到循环外。使用局部变量:局部变量的访问速度通常比全局变量快。代码并行执行:如果可能,使用并行执行指令来同时处理多个任务。通过这些高级编程技巧,我们可以编写出更高效、更稳定、更易于维护的ASLanguage程序,从而提高工业机器人的生产效率和可靠性。4高级功能应用4.1路径规划与运动控制在工业机器人编程中,路径规划与运动控制是确保机器人精确执行任务的关键。ASLanguage提供了丰富的指令集来实现这一功能,包括直线运动、圆弧运动和关节运动等。4.1.1直线运动直线运动(LIN)是机器人从一个点移动到另一个点的最直接方式。在ASLanguage中,可以使用LIN命令来定义这种运动。4.1.1.1示例代码;定义直线运动到目标点
LINP1,V100,Z10,tool0,Wobj0;P1是目标点的名称。V100是运动速度。Z10是转弯区数据,用于定义接近目标点时的路径。tool0是工具坐标系。Wobj0是工件坐标系。4.1.2圆弧运动圆弧运动(CIRC)用于机器人需要沿着圆弧路径移动的场景。ASLanguage的CIRC命令可以实现这一功能。4.1.2.1示例代码;定义圆弧运动到目标点
CIRCP1,P2,P3,V100,Z10,tool0,Wobj0;P1是圆弧的起点。P2是圆弧的中间点。P3是圆弧的终点。其他参数与直线运动相同。4.1.3关节运动关节运动(JNT)用于机器人需要通过关节角度来移动的情况。这在需要精确控制每个关节时非常有用。4.1.3.1示例代码;定义关节运动到目标点
JNTJ1,J2,J3,J4,J5,J6,V100,Z10;J1到J6是每个关节的目标角度。V100和Z10的定义与前两种运动相同。4.2传感器数据集成与处理ASLanguage支持集成和处理来自各种传感器的数据,如力传感器、视觉传感器等,以实现更智能的机器人操作。4.2.1力传感器数据处理力传感器可以检测机器人在操作过程中的力反馈,这对于实现柔顺控制至关重要。4.2.1.1示例代码;读取力传感器数据
READ_FORCEforce_data;
;检查力是否超过阈值
IFforce_data>100THEN
;如果力过大,停止机器人运动
STOP;
ENDIF;4.2.2视觉传感器数据处理视觉传感器用于识别和定位物体,ASLanguage可以通过读取视觉传感器数据来调整机器人的动作。4.2.2.1示例代码;读取视觉传感器数据
READ_VISIONvision_data;
;根据视觉数据调整目标点位置
P1.x=vision_data.x;
P1.y=vision_data.y;
P1.z=vision_data.z;
;执行直线运动到调整后的位置
LINP1,V100,Z10,tool0,Wobj0;4.3通信协议与网络连接ASLanguage支持多种通信协议,如TCP/IP、ProfiNET等,以实现机器人与外部设备的通信。4.3.1TCP/IP通信通过TCP/IP协议,机器人可以与计算机或其他网络设备进行数据交换。4.3.1.1示例代码;定义TCP连接
TCP_CONNECT"192.168.1.100",502;
;发送数据
TCP_SEND"Hello,World!";
;接收数据
TCP_RECEIVEdata;
;断开连接
TCP_DISCONNECT;4.3.2ProfiNET通信ProfiNET是一种工业以太网通信标准,用于机器人与生产线上的其他设备进行高速数据交换。4.3.2.1示例代码;定义ProfiNET连接
PROFINET_CONNECT"Device1";
;读取ProfiNET设备数据
PROFINET_READdata;
;写入数据到ProfiNET设备
PROFINET_WRITE"Datatosend";
;断开连接
PROFINET_DISCONNECT;通过上述高级功能的应用,ASLanguage能够使工业机器人执行更复杂、更精确的任务,同时通过传感器数据的集成与处理以及通信协议的使用,增强了机器人的智能性和适应性。5实际案例分析5.1复杂任务编程示例在工业自动化领域,ASLanguage(Kawasaki)被广泛用于编程复杂的机器人任务。下面,我们将通过一个示例来展示如何使用ASLanguage实现一个机器人在装配线上的复杂操作。5.1.1示例:机器人装配操作假设我们有一个装配线,需要机器人从一个零件库中选择正确的零件,然后将其精确地安装到产品上。这个任务涉及到视觉识别、精确移动和装配操作。5.1.1.1代码示例;定义视觉系统和机器人坐标系
DEFINEVISION_SYSTEMVisionSystem
DEFINEROBOT_COORDINATECoordinateSystem
;初始化视觉系统
VisionSystem.Initialize()
;读取零件库中的零件信息
VisionSystem.ReadPartLibrary()
;选择正确的零件
PartID=VisionSystem.SelectPart()
;移动到零件位置
Robot.MoveTo(CoordinateSystem.PartPosition[PartID])
;抓取零件
Robot.Grip()
;移动到产品装配位置
Robot.MoveTo(CoordinateSystem.AssemblyPosition)
;安装零件
Robot.InstallPart()
;移动到安全位置
Robot.MoveTo(CoordinateSystem.SafePosition)
;释放零件
Robot.Release()5.1.1.2解释定义系统和坐标系:首先,我们定义了视觉系统和机器人坐标系,这是实现复杂任务的基础。初始化视觉系统:确保视觉系统准备好进行识别。读取零件库:视觉系统读取所有可能零件的信息,以便识别。选择零件:通过视觉系统识别并选择正确的零件。移动到零件位置:机器人根据视觉系统提供的信息,移动到正确的零件位置。抓取零件:机器人执行抓取动作。移动到装配位置:机器人移动到产品装配的位置。安装零件:机器人将抓取的零件安装到产品上。移动到安全位置:完成装配后,机器人移动到一个安全的位置,准备下一次操作。释放零件:在安全位置,机器人释放零件,准备抓取下一个零件。5.2生产线自动化案例研究生产线自动化是工业机器人应用的重要领域。ASLanguage提供了丰富的功能来控制和协调生产线上的多个机器人。5.2.1案例:多机器人协作假设我们有一个生产线,需要两个机器人协作完成一个产品的装配。一个机器人负责抓取零件,另一个机器人负责安装。5.2.1.1代码示例;定义两个机器人
DEFINEROBOTRobotA
DEFINEROBOTRobotB
;定义零件和装配位置
DEFINEROBOT_COORDINATEPartPosition
DEFINEROBOT_COORDINATEAssemblyPosition
;RobotA移动到零件位置
RobotA.MoveTo(PartPosition)
;RobotA抓取零件
RobotA.Grip()
;RobotB移动到安全等待位置
RobotB.MoveTo(CoordinateSystem.WaitPosition)
;RobotA移动到装配位置
RobotA.MoveTo(AssemblyPosition)
;RobotB移动到装配位置,等待RobotA完成
RobotB.MoveTo(AssemblyPosition,Wait=True)
;RobotA安装零件
RobotA.InstallPart()
;RobotB完成等待,开始安装操作
RobotB.StartAssembly()
;RobotA移动到安全位置
RobotA.MoveTo(CoordinateSystem.SafePosition)
;RobotB完成装配,移动到安全位置
RobotB.MoveTo(CoordinateSystem.SafePosition)5.2.1.2解释定义机器人:我们定义了两个机器人RobotA和RobotB。定义位置:定义了零件位置和装配位置。RobotA操作:RobotA移动到零件位置,抓取零件,然后移动到装配位置。RobotB协调:RobotB在RobotA完成抓取和移动后,移动到装配位置开始装配操作。完成操作:两个机器人在完成各自的任务后,都移动到安全位置。5.3故障排除与维护编程在工业机器人使用过程中,故障排除和维护是必不可少的。ASLanguage提供了诊断和维护功能,帮助工程师快速定位和解决问题。5.3.1故障排除示例假设机器人在操作过程中突然停止,我们需要编写代码来诊断问题并尝试恢复操作。5.3.1.1代码示例;定义故障恢复程序
DEFINEPROCEDUREFaultRecovery()
;检查机器人状态
IFRobot.IsStopped()THEN
;检查是否为紧急停止
IFRobot.IsEmergencyStopped()THEN
;解除紧急停止
Robot.ResetEmergencyStop()
ENDIF
;检查是否为过载
IFRobot.IsOverloaded()THEN
;重置过载
Robot.ResetOverload()
ENDIF
;检查是否为位置错误
IFRobot.IsPositionError()THEN
;重新定位
Robot.Reposition()
ENDIF
;检查是否为软件故障
IFRobot.IsSoftwareFault()THEN
;重启软件
Robot.RestartSoftware()
ENDIF
;尝试重新启动机器人
Robot.TryRestart()
ENDPROC5.3.1.2解释定义故障恢复程序:创建一个名为FaultRecovery的程序,用于处理机器人故障。检查机器人状态:通过一系列的条件判断,检查机器人是否处于停止状态。故障类型检查:紧急停止:如果机器人因紧急停止而停止,尝试解除紧急停止。过载:如果机器人因过载而停止,重置过载状态。位置错误:如果机器人因位置错误而停止,尝试重新定位。软件故障:如果机器人因软件故障而停止,重启软件。尝试重新启动:在处理完所有可能的故障后,尝试重新启动机器人。通过以上示例,我们可以看到ASLanguage(Kawasaki)在处理复杂任务、多机器人协作以及故障排除方面的强大功能。这些高级编程技巧对于提高工业自动化生产线的效率和可靠性至关重要。6ASLanguage编程最佳实践总结在工业机器人编程中,ASLanguage(Kawasaki)作为一种强大的编程语言,提供了丰富的功能和灵活性,以满足各种自动化需求。为了提高编程效率和代码质量,以下是一些ASLanguage的高级编程技巧和最佳实践:6.1模块化编程6.1.1原理模块化编程是将程序分解为独立的、可重用的模块,每个模块负责特定的功能。这不仅使代码更易于理解和维护,还提高了代码的复用性。6.1.2内容定义模块:使用MODULE关键字定义模块,将相似功能的代码组织在一起。模块调用:通过CALL语句调用模块,减少重复代码,提高编程效率。6.1.2.1示例MODULEMoveToPosition
PROCEDUREMoveTo
;定义移动到特定位置的模块
;参数:X,Y,Z坐标
;返回:无
MOVELINP[X,Y,Z],V100,Z10,TOOL0;
ENDPROCEDURE
ENDMODULE
CALLMoveToPosition.MoveTo(100,200,300);在上述示例中,我们定义了一个名为MoveToPosition的模块,其中包含一个MoveTo过程,用于移动机器人到指定的坐标位置。通过调用MoveTo过程,可以轻松地在程序中多次使用相同的移动逻辑,而无需重复编写代码。6.2使用变量和数据类型6.2.1基本原理在ASLanguage中,合理使用变量和数据类型可以增强程序的灵活性和可读性。6.2.2内容变量声明:使用VAR关键字声明变量,指定数据类型。数据类型:包括整数、实数、字符串、数组等。6.2.2.1示例VARpos:ARRAY[1..3]OFREAL;
pos[1]:=100;
pos[2]:=200;
pos[3]:=300;
CALLMoveToPosition.MoveTo(pos[1],pos[2],pos[3]);在这个例子中,我们声明了一个名为pos的数组变量,用于存储机器人的X、Y、Z坐标。通过使用数组,可以更方便地管理和传递坐标数据。6.3错误处理6.3.1原理错误处理是确保程序在遇到异常情况时能够稳定运行的关键。ASLanguage提供了错误处理机制,允许程序员捕获和处理运行时错误。6.3.2内容错误捕获:使用TRY...CATCH结构来捕获和处理错误。错误代码:每个错误都有一个特定的错误代码,用于识别错误类型。6.3.2.1示例TRY
;尝试执行可能出错的操作
MOVELINP[100,200,300],V100,Z10,TOOL0;
CATCH
;如果发生错误,执行此块代码
WRITE"发生错误,错误代码:",GET_ERROR_CODE();
ENDTRY在示例中,我们使用TRY...CATCH结构来尝试执行一个线性移动操作。如果移动过程中发生错误,如碰撞或位置超限,CATCH块将捕获错误并输出错误代码,帮助诊断问题。6.4循环和条件语句6.4.1原理循环和条件语句是控制程序流程的基本结构,允许根据不同的条件执行不同的代码块。6.4.2内容循环:使用FOR和WHILE循环来重复执行代码。条件语句:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度城市轨道交通信号系统安装合同3篇
- 2025年度敬老院老人意外伤害事故赔偿处理合同范本3篇
- 2024年航天发射服务商业运营合同
- 2025版蔬菜种子购销合同3篇
- 2024年度新媒体内容授权签合同协议3篇
- 2024年科技企业新媒体推广合同3篇
- 二零二五年度借车合同范本:赛事活动车辆借用及使用合同2篇
- 2024年船舶维修建造合同
- 企业级数据安全技术规范风险评估服务合同
- 云计算服务合同合作协议
- 浙江省杭州市钱塘区2023-2024学年四年级上学期数学期末试卷
- 《湖北省市政基础设施工程质量标准化图册》(燃气管网工程)
- 2024年考研(英语一)真题及参考答案
- 山东省济南市(2024年-2025年小学四年级语文)人教版期末考试((上下)学期)试卷及答案
- 交通灯课程设计交通灯控制器
- 肿瘤科常见急重症
- 03SG715-1蒸压轻质加气混凝土板(NACL)构造详图
- 尽职调查工作底稿1_公司业务调查
- 集装箱码头堆场项目可行性研究报告写作范文
- 医保药店一体化信息管理系统操作手册
- 小学六年级数学上期家长会精品课件
评论
0/150
提交评论