版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工业机器人搬运工作站相关指令及其应用1Incr的应用(1)在机器人工作过程中我们常用reg1:=reg1+1对运行次数进行计数,指令Incr同样也可实现此功能,每执行此语句一次即将1增加至reg1。例2-1:Incr的程序编写。VARnumreg1;Incrreg1; !每运行一次则对reg1加1。
2运动速度及加速度控制指令的应用VelSet与AccSet指令分别用来控制TCP的速度与加速度。其中VelSet指令中的两个参数分别用来设定后续机器人运动指令中TCP速率的百分率与限制最大速度,当不对它做任何定义时其默认值为VelSet100,5000。AccSet指令中的两个参数分别用来限制机器人从当前运动达到设定速度的加减速度最大值与增减率,其默认值为AccSet100,100。例:速度与加速度设定指令可放在初始化程序中用来控制机器人接下来任务中所有运动指令的TCP速率。PROCrInit() …AccSet50,100;!机器人加减速度的最大值降为默认值的50%,其增减率为默认值。!若AccSet100,70,则机器人加减速度的最大值为默认值,其增减率为默认值的70%。 VelSet50,800; !速度降为运动指令中的50%,限制其最大速度为800。ENDPROC3功能程序FUNC的使用z=x+y
FUNCnumsum(numx,numy)VARnumz;z:=x+y;RETURNz;ENDFUNCreg1:=sum(2,3);PROCRoutine()ENDPROCreg1=54读取当前位置数据功能CRobT与CjointT的应用功能CRobT与CJointT的基本使用CRobT(CurrentRobotTarget):用于读取机械臂和外轴的当前位置,读取到的数据将被储存为Robtarget型数据CJointT(CurrentJointTarget):用于读取机械臂轴和外轴的当前角度,读取到的数据将被储存为Jointtarget型数据例:PERSrobtargetp1;PROCRoutine()p1:=CRobT();!将当前点数据赋值至p1
MoveLOffs(CRobT(),0,0,200),v1000,fine,tool0;!在move指令中直接调用读取当前目标点功能MoveAbsjCJointT(),v1000,fine,tool0;!在moveAbsj指令中直接调用读取当前目标点功能ENDPROC在使用时通常将其直接赋值至可变量目标点或直接执行Move或MoveAbsj运动指令:4读取当前位置数据功能CRobT与CjointT的应用功能CRobT的变元CRobT([\TaskRef]|[\TaskName][\Tool][\WObj])[\TaskRef]数据类型:taskid程序任务识别号读取当前任务“任务名”+“Id”如:T_ROB1。[\TaskName]数据类型:string直接读取程序任务名称。[\Tool]数据类型:tooldata定义用于计算当前机械臂位置的工具坐标系。如果省略该参数,则使用当前的有效工具。[\WObj]数据类型:wobjdata定义用于计算当前机械臂位置的工件坐标系。如果省略该参数,则使用当前的有效工件。CJointT中变元仅需定义程序任务名称4读取当前位置数据功能CRobT与CjointT的应用CRobT的应用举例例:使用数据读取功能CRobT,使机器人移动至当前所在目标点上方200mm处。PERSrobtargetp1;PROCRoutine()p1:=CRobT(\Tool:=tool1\WObj:=Wobj1);
!指定当前目标点工具坐标tool1,工件坐标Wobj1。
!若定义p1:=CRobT(),则默认为当前工具、工件坐标MoveLOffs(p1,0,0,200),v1000,fine,tool1\WObj:=Wobj1;ENDPROC4读取当前位置数据功能CRobT与CjointT的应用CJointT的应用举例例:使用数据读取功能CJointT,要求机器人在当前目标点单独转动一轴,使其正向偏移90°。PERSjointtargetp1;PROCRoutine()p1:=CJointT();p1.robax.rax_1:=p1.robax.rax_1+90;!将p1的一轴正向偏移90°,此类赋值方式会在下一小节中详细介绍。MoveAbsJp1,v1000,fine,tool1\WObj:=Wobj1;ENDPROC4读取当前位置数据功能CRobT与CjointT的应用CRobT在示教器中的调用方法Step1:在“功能”中找到CRobTStep2:在“编辑”中调用变元4读取当前位置数据功能CRobT与CjointT的应用CRobT在示教器中的调用方法Step3:更改需要使用的变元状态Step4:调用相应变元CJointT调用方法与CRobT基本相同5目标点数据参数赋值的使用方法目标点数据Robtarget的组件CONSTrobtargetPhome:=[[302,0,451],[0,0.7,0.7,0],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];Phome组件组件名称描述Phome组件描述[302,0,451]trans(translation)数据类型:pos工具坐标中点所在位置(x、y、z)单位为mm。储存相对于当前工件坐标系所在位置,若未指定则为大地坐标系Phome在大地坐标系中的位置x=302、y=0、z=451[0,0.7,0.7,0]rot(rotation)数据类型:orient工具坐标系姿态,以四元数形式表示(q1、q2、q3、q4)储存相对于当前工件坐标系方向的工具姿态,若未指定则为大地坐标系工具坐标系姿态相对于当前工件坐标系四元数q1=0、q2=0.7、q3=0.7、q4=0[0,0,1,0]robconf(robotconfiguration)数据类型:confdata机械臂的轴配置(cf1、cf4、cf6和cfx)。以轴1、轴4和轴6当前四分之一旋转的形式进行定义。将第一个正四分之一旋转0到90°定义为0。组件cfx的含义取决于机械臂类型。轴1、轴4位于0到90°,轴6位于90°到180°[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]extax(externalaxes)数据类型:extjoint附加轴的位置,这里的附加轴可以是机器人的第7轴,一般为ABB传送带,也可以是变位机等随动设备。未定义附加轴a至f5目标点数据参数赋值的使用方法目标点数据Robtarget组件的调用CONSTrobtargetPhome:=[[302,0,451],[0,0.7,0.7,0],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];调用trans调用x,y,z的方法[302,0,451]Phome.trans302Phome.trans.x0Phome.trans.y451Phome.trans.z调用rot调用q1-q4的方法
[0,0.7,0.7,0]Phome.rot0Phome.rot.q10.7Phome.rot.q20.7Phome.rot.q30Phome.rot.q45目标点数据参数赋值的使用方法目标点数据Robtarget组件的调用PERSrobtargetp1;CONSTrobtargetp2:=[[300,0,0],[0,0,1,0],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];PROCExemple()p1.trans.x:=p2.trans.x;p1.trans.y:=p2.trans.y;p1.trans.z:=p2.trans.z;!可单独调用x、y、z方向偏移p1.rot=p2.rot;!可继续单独调用rot下的q1、q2、q3、q4例:p1.rot.q1:=p2.rot.q1p1.robconf=p2.robconf;!可继续单独调用robconf下的cf1、cf4、cf6和cfx例:p1.robconf.cf1:=p2.robconf.cf1p1.extax=p2.extax;!可继续单独调用6个附加轴例:p1.extax.eax_a:=p2.extax.eax_aENDPROC本例中调用p2下的组件,并将其赋值给可变量目标点p1。5目标点数据参数赋值的使用方法目标点数据Robtarget组件的调用例:使用组件数据实现目标点p1朝z方向上偏移100mm。PERSrobtargetp1;CONSTrobtargetp2:=[[300,0,0],[0,0,1,0],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];PROCRoutine()P1:=P2p1.trans.z:=p2.trans.z+100;!重新定义p1目标点z方向偏移参数为p2点z方向偏移100mm的高度,MoveLp1,v1000,fine,tool0;ENDPROC5目标点数据参数赋值的使用方法目标点数据Robtarget组件的调用例:使用组件数据实现目标点p1朝z方向上偏移100mm。PERSrobtargetp1;CONSTrobtargetp2:=[[300,0,0],[0,0,1,0],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];PROCRoutine()P1:=P2MoveLp1,v1000,fine,tool0;TESTNCASE1p1.trans.X:=p2.trans.X+100;CASE2p1.trans.X:=p2.trans.X+100;p1.trans.Y:=p2.trans.Y+100;CASE3p1.trans.Y:=p2.trans.Y+100;ENDTESTINCRN;ENDPROC5目标点数据参数赋值的使用方法目标点数据Robtarget组件的调用例:控制机器人由当前点,安全移动至自定义工作原点。PROCMoveToHomePos()
VARrobtargetpActualPos;
pActualpos:=CRobT(\Tool:=Gripper\WObj:=wobj0);pActualpos.trans.z:=pHome.trans.z;
!重新定义pActualpos目标点z方向偏移参数为pHome点z方向偏移高度,pActualpos其他组件数据不变。MoveLpActualpos,v500,z10,Gripper;!为避免机器人与周边设备发生碰撞,机器人首先由当前点沿着z方向直线移动至pHome同高的安全位置。MoveJpHome,v500,fine,Gripper;!由安全位置移动至机器人原点。
ENDPROC5目标点数据参数赋值的使用方法示教器中目标点数据参数的调用方法工业机器人搬运工作站坐标系的设定1学习方法PROCCheckHomePos()VARrobtargetpActualPos; IFNOTCurrentPos(pHome,Gripper,wobj0)THEN !调用FUNC功能程序,设定目标点为机器人原点,TCP为Gripper工具坐标,wobj0为工件坐标。!判断机器人当前是否在允许相差范围内的pHome点,若不在则移动至原点。pActualpos:=CRobT(\Tool:=Gripper\WObj:=wobj0);pActualpos.trans.z:=pHome.trans.z; !重新定义pActualpos目标点z方向偏移参数为pHome点z方向偏移高度,pActualpos其他组件数据不变。
MoveLpActualpos,v500,z10,Gripper; !为避免机器人与周边设备发生碰撞,机器人首先由当前点沿着z方向直线移动至pHome同高的安全位置。MoveLpHome,v500,fine,Gripper;!由安全位置移动至机器人原点。ENDIFENDPROC
机器人回原点的程序设计在所有程序中,基本都需要实现机器人从任意目标点移动至原点的功能,在移动过程中机器人必须避免与周围设备发生碰撞,具体编程如下所示。FUNCboolCurrentPos(robtargetComparePos,INOUTtooldataTCPcompare,INOUTwobjdataWobjcompare)!定义FUNC功能程序判断当前点位是否接近目标点,程序数据类型为bool,参数为机器人目标点robtarget以及所用工具坐标。若目标点为pHome点,其括号中第一个实参为pHome,第二个参数为当前所用工具坐标比如tool1。VARnumCounter:=0; !定义整型变量用于计数VARrobtargetActualPos;!定义Actualpos用于存放当前机器人目标点参数ActualPos:=CRobT(\Tool:=TCPcompare\WObj:=Wobjcompare);!读取当前机器人目标点,注意ActualPos与ComparePos需在同一个工件、工具坐标下。IFActualPos.trans.x>ComparePos.trans.x-25ANDActualPos.trans.x<ComparePos.trans.x+25Counter:=Counter+1;IFActualPos.trans.y>ComparePos.trans.y-25ANDActualPos.trans.y<ComparePos.trans.y+25Counter:=Counter+1;IFActualPos.trans.z>ComparePos.trans.z-25ANDActualPos.trans.z<ComparePos.trans.z+25Counter:=Counter+1;!判断当前点x、y、z方面偏移是否分别在目标点x、y、z方向偏移的正负25mm内,满足条件则将Counter计数加一。IFActualPos.rot.q1>ComparePos.rot.q1-0.1ANDActualPos.rot.q1<ComparePos.rot.q1+0.1Counter:=Counter+1;IFActualPos.rot.q2>ComparePos.rot.q2-0.1ANDActualPos.rot.q2<ComparePos.rot.q2+0.1Counter:=Counter+1;IFActualPos.rot.q3>ComparePos.rot.q3-0.1ANDActualPos.rot.q3<ComparePos.rot.q3+0.1Counter:=Counter+1;IFActualPos.rot.q4>ComparePos.rot.q4-0.1ANDActualPos.rot.q4<ComparePos.rot.q4+0.1Counter:=Counter+1;!判断当前点四个方相的旋转角度是否分别在目标点四个方相的旋转角度的正负0.1内,满足条件则将Counter计数加一。!本段程序也可以考虑使用distance()及abs()功能实现相对更便捷的编程。RETURNCounter=7; !判断Counter值是否为7,返回TRUE/FALSE!当所有if条件均满足时Counter为7,前点位足够接近目标点,返回TRUE。当存在任何if条不满足时Counter不等于7,前点位与目标点存在一定偏移,返回FALSEENDFUNC2机器人搬运的轨迹设计及基本编程思路抓取点抓取等待点放置等待点放置点传送带物料盒抓取等待点放置等待点3可变量工件坐标的应用完整项目展示与讲解1工具坐标的设定指令帮助系统的使用定义吸盘工具坐标位置:于Tool0延Z方向偏移107mm处定义吸盘工具坐标质量:于Tool0延Z方向偏移107mm处双流水线程序讲解
PROCMain()rInit;
!初始化
WHILE
TRUE
DODefinePos;
!确定抓取物料种类以及是否已满足抓取条件。
IFready=TRUE
THEN!判断是否已满足抓取条件。CalculatePos;
!确定机器人取放位置。rPick;rPlace;
!调用机器人取放动作子程序
ENDIF
WaitTime0.3;
!每运行一次暂停0.3s,防止机器人控制器CPU过负荷
ENDWHILEENDPROC主程序循环机器人开始运动判断rInit子程序讲解
PROCMain()rInit;
!初始化
WHILE
TRUE
DODefinePos;
!确定抓取物料种类以及是否已满足抓取条件。
IFready=TRUE
THEN!判断是否已满足抓取条件。CalculatePos;
!确定机器人取放位置。rPick;rPlace;
!调用机器人取放动作子程序
ENDIF
WaitTime0.3;
!每运行一次暂停0.3s,防止机器人控制器CPU过负荷
ENDWHILEENDPROC中断程序讲解圆形料盒更换中断信号处理程序方形料盒更换中断信号处理程序圆形料盒更换中断信号方形料盒更换中断信号DefinePos子程序讲解
PROCMain()rInit;
!初始化
WHILE
TRUE
DODefinePos;
!确定抓取物料种类以及是否已满足抓取条件。
IFready=TRUE
THEN!判断是否已满足抓取条件。CalculatePos;
!确定机器人取放位置。rPick;rPlace;
!调用机器人取放动作子程序
ENDIF
WaitTime0.3;
!每运行一次暂停0.3s,防止机器人控制器CPU过负荷
ENDWHILEENDPROCCalculatePos子程序讲解
PROCMain()rInit;
!初始化
WHILE
TRUE
DODefinePos;
!确定抓取物料种类以及是否已满足抓取条件。
IFready=TRUE
THEN!判断是否已满足抓取条件。CalculatePos;
!确定机器人取放位置。rPick;rPlace;
!调用机器人取放动作子程序
ENDIF
WaitTime0.3;
!每运行一次暂停0.3s,防止机器人控制器CPU过负荷
ENDWHILEENDPROC123410mm工业机器人搬运工作站码垛相关指令1写入FlexPendant示教器的通信指令TPWrite为方便操作人员掌握机器人执行任务情况,我们可调用示教器通信指令TPWrite,在FlexPendant示教器人机交互界面上显示相关信息。除了显示字符串类型外,在字符串后也可以添加变量名用以显示特定数据的值,其功能与c语言中的printf函数类似,在Rapid中的程序编写如下:例2-1使用TPWrite指令显示字符串及num型变量的结果。CONSTpospos1:=[15,43,24];PROCmain()
TPWrite"Helloworld";!在示教器上写入Helloworldreg1:=12*20;TPWrite"Theresultis:"\Num:=reg1;!在示教器上写入字符串并显示运算结果num型变量reg1的值TPWrite"Thepositionis:"\Pos:=pos1;!在示教器上写入字符串并显示运算结果pos型变量pos1的坐标值ENDPROC程序编辑器添加指令CommunicateTPWrite可选变量\Num2用于从FlexPendant示教器读取编号指令TPRead与TPWrite指令功能相反的TPRead指令,用于将数据写入FlexPendant示教器显示器。与TPWrite相同,显示的字符串最长80个字节,屏幕每行可显示40字节。TPRead的功能与c语言中的scanf函数类似。由于TPRead指令的操作是基于示教器来实现,本节将直接结合示教器的操作进行讲解。在“添加指令”中选择“Communicate”即可找到三个相关指令,其中TPReadNum与TPReadDnum功能完全相同,只存在最终储存输入编号变量数据类型的差异。TPReadNum指令最终储存输入编号的变量的类型为num型,而TPReadNum为dnum型。使用TPReadNum指令输入数值并将其存储nNum1中。VARnumnNum1:=0;PROCmain()
TPReadNumnNum1,"pleaseenteranumber...";!在示教器上写入pleaseenteranumber...,并将输入存储在变量nNum1中
WaitTime1;TPWrite"Theinputvalueis"\Num:=nNum1;!为了能跟直观观察到nNum值的变化,我们用TPWrite指令一秒后将值写入到示教器上。
ENDPROC我们将程序运行两遍,先后输入不同的值3和9,可以看到变量nNum1随着我们输入值的变化而同步变化。3计时指令
机器人在执行生产任务时需要记录运行时间以便控制生产节奏,在机器人控制指令中设有以CLK开头的计时专用指令ClkStart、ClkStop、ClkRead等。
在使用计时功能之前必须创建一个时钟数据类型的变量,用于存储计时时间,在计时结束后需要使ClkRead指令读取计时数据并存入num变量,具体步骤包括:创建时钟类型变量;复位后开始计时;开始运行需要计时的程序;停止计时后读取计时数据。示教器中计时指令的调用方法:在计数功能相关指令“System&Time”中可对相关计时功能进行调用。4SpeedData的设定SpeedData用于规定机械臂和外轴开始移动时的速率。SpeedData中各参数的说明如下表所示,实际上在没有外轴的情况下,控制机器人的运行速度只需对v_tcp进行设定即可名称说明单位v_tcp工具中心点的速率mm/sv_oriTCP的重新定位速率度/秒v_leax线性外轴的速率mm/sv_reax旋转外轴的速率度/秒名称TCP速度方向线性外轴旋转外轴v55mm/s500︒/s5000mm/s1000︒/sv1010mm/s500︒/s5000mm/s1000︒/sv2020mm/s500︒/s5000mm/s1000︒/sv3030mm/s500︒/s5000mm/s1000︒/sv4040mm/s500︒/s5000mm/s1000︒/sv5050mm/s500︒/s5000mm/s1000︒/sv6060mm/s500︒/s5000mm/s1000︒/sv80800mm/s500︒/s5000mm/s1000︒/sv100100mm/s500︒/s5000mm/s1000︒/s5有效载荷LoadData的设定Loaddata是用来描述安装到机器人法兰盘上的负载的数据,通常情况下会作为tooldata的一部分,对于搬运应用的机器人,必须在tooldata中正确设定工具的质量、重心。带焊枪的焊接机器人或者质量较小的物料搬运机器人,由于工具质量偏小,一般不需要特别设定此部分参数。定义的荷载会被用来建立一个机器人的动力学模型,使机器人以最好的方式控制运动,不正确的负载数据会使机器人的机械结构超载并导致:
①机器人不会使用它的最大载重量;②受影响的路径精度包括过冲的风险(伺服电机的惯量匹配不恰当所引起的伺服
电机PID闭环超调震荡);
③机械单元过载的风险。名称参数单位有效载荷质量load.massKg有效载荷重心load.cog.xload.cog.yload.cog.zmm力矩轴方向load.aom.q1load.aom.q2load.aom.q3load.aom.q4
有效载荷的转动惯量ixiyizKg·m26工具坐标相关功能RelTool的使用在机器人码垛过程中,根据物料码垛要求经常需要对物料沿着竖直方向进行旋转,在工具坐标与法兰盘坐标z方向一致时,可以使用单转第6轴的方式实现。在工具坐标方向与法兰盘坐标方向不一致时,RelTool功能可实现相对工具坐标系的位移和/或旋转。与Offs功能相比较,RelTool功能除了能沿着任意工具坐标方向进行偏移外,还可以实现绕工具坐标一个或多个方向进行旋转。而Offs指令只能实现以wobj工件坐标方向上的偏移。例:已知目标点p1,移动p1点至Mytool坐标z轴负方向100mm(Mytool坐标方向如图3-16所示),程序编写如下:MoveLRelTool(p1,0,0,-100),v1000,z50,tool0;示教器中RelTool指令的调用7数组的应用例3-8:利用一维数组存储点位,完成如图3-19中的方型轨迹。CONSTrobtargetp1;CONSTrobtargetp2;CONSTrobtargetp3;CONSTrobtargetp4;CONSTrobtargetpArray{5}:=[p1,p2,p3,p4,p1];!定义一个集合5个目标点类型的一维数组。VARnumnCounter:=0;PROCmain()WHILEnCounter<5DOnCounter:=nCounter+1;MoveLpArray{nCounter},v1000,z50,tool0;!五次循环,每次循环都会将数组中的一个点位调用。!当nCounter=1时,pArray{1}为p1点;!当nCounter=2时,pArray{2}为p2点;!当nCounter=3时,pArray{3}为p3点;!…依次类推。ENDWHILEENDPROC组是将相同数据类型的元素按一定顺序排列的集合,需要的时候可按照排列号码进行调用,灵活的运用数组可以让程序简化、高效。所有类型的数据都可以创建数组,在ABB中可创建的数组维数最高为3维,与其他语言不同的是ABB中数组起始序号为1而不是0,具体的应用方式如例3-8所示。8中断程序的应用创建中断数据(中断符)
VARintnumintno1;
初始化中断符;IDeleteintno1;!删除中断定义(可以理解为初始化)。
CONNECTintno1WITHtestTRAP;!将已创建的中断符intno1与中断程序testTRAP相关联,当intno1被触发运行指针会跳转至testTRAP。ISignalDIdi1,1,intno1;!将输入信号di1与中断符intno1相关联,当di1信号置为1时中断符intno1被触发。
定义中断子程序;TRAPtestTRAPreg1:=reg1+1;ENDTRAP中断程序运行过程:di1被触发->中断符intno1被触发
->跳转至中断子程序testTRAP并执行
->完成后指针跳转回正常程序中断处继续往下执行。在机器人正常的程序运行中,程序指针默认从上往下依次执行程序语句。但在一些特殊的情况下,比如紧急停止,需要立即被执行。调用中断指令可以实现运行指针立即跳转至相应的中断程序的功能,在执行完成后重新跳转回被中断的正常运行程序行,继续执行接下来程序。创建中断指令主要涉及到三个步骤:工业机器人搬运工作站码垛相关指令应用1RelTool的应用在某一生产过程中,为了检测轮毂的质量好坏,机器人将轮毂送往视觉检测单元,分别需要对视觉检测区域1与视觉检测区域2进行拍照检测处理,若其中任何一个区域检测结果不通过则判断该轮毂为不合格产品。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电焊技术培训服务合同(2024年度)
- 2024年度文化艺术活动合作协议
- 2024年度风力发电项目投资建设合同
- 导演合同完整版
- 二零二四年度木托盘防腐处理服务合同
- 二零二四年度宾馆网络建设合同:规定宾馆网络建设的具体内容和标准
- 2024年度市场营销与代加工生产协议2篇
- 拆除合同范本简单16
- 二零二四年度采购合同书范例
- 二零二四年度品牌授权与加盟合同
- 2024年糖尿病指南解读
- 青少年预防艾滋病班会
- 国家太空安全
- 仓库年终安全培训
- 二十届三中全会精神知识竞赛试题及答案
- 人教版小学数学六年级上册《百分数》单元作业设计
- 数学核心经验
- 认识医院科教科PPT演示课件
- 天然气管道工程竣工资料样表及使用总说明
- 油井工况分析思路和方法
- 引水工程解析
评论
0/150
提交评论