- 2022-09-27 发布 |
- 37.5 KB |
- 165页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
一种四轴 usb接口 运动控制卡使用手册
9030运动控制卡使用手册2010/05/01V1.0\n版权声明东方嘉宏机电技术有限责任公司保留所有权力东方嘉宏机电技术有限责任公司(以下简称东方嘉宏)保留在不事先通知的情况下,修改本手册中的产品和产品规格等文件的权力。东方嘉宏不承担由于使用本手册或本产品不当,所造成直接的、间接的、特殊的、附带的或相应产生的损失或责任。东方嘉宏具有本产品及其软件的专利权、版权和其它知识产权。未经授权,不得直接或者间接地复制、制造、加工、使用本产品及其相关部分。运动中的机器有危险!使用者有责任在机器中设计有效的出错处理和安全保护机制,东方嘉宏没有义务或责任对由此造成的附带的或相应产生的损失负责。1\n前言使用手册的用途本手册记录了9030控制卡的控制功能、函数的用法、特定控制功能的编程实现等。通过阅读本手册用户可以根据自己特定的控制系统,编制用户应用程序,实现控制要求。使用手册的使用对象本编程手册适用于具有c语言编程基础或Windows环境下使用动态链接库的基础,同时具有一定运动控制工作经验,对伺服和步进控制的基本结构有一定了解的工程开发人员。使用手册的主要内容本手册分为三章:第一章《硬件指南》主要介绍9030运动控制卡的硬件结构,方便工程技术人员安装、调试参考;第二章《软件指南》主要介绍9030运动控制卡的控制功能、库函数详解及编程实现。在随产品配套的用户光盘中有相关编程示例;第三章《库函数详解》详细介绍所有库函数的格式及功能,方便工程开发人员查阅。另外,在使用手册最后附录为一些特殊功能的解释,供用户参考。产品更多信息公司网址是http://www.dfjzh.com。在公司主页上有关于产品的所有信息,包括:产品介绍、技术支持、最新产品发布、演示版软件等。同时也可以拨打电话(010-62325085转809)咨询关于公司和产品的更多信息。技术支持与售后服务你可以通过以下途径获得我们的技术支持和售后服务:*电子邮件:dfjzh@263.net*技术咨询电话:(010)62325085-809手机13488746253陈*发函至:北京市海淀区北四环中路209号健翔园1号楼102室北京东方嘉宏机电技术有限责任公司邮编:1000832\n第一章硬件指南.......................................................................................................................................1§1.1概述...............................................................................................................................................1§1.29030规格表.................................................................................................................................1§1.3控制卡的安装...............................................................................................................................3§1.4控制卡的硬件连线........................................................................................................................3§1.5电机控制信号...............................................................................................................................5§1.5.1伺服编码器输入连接方法....................................................................................................6§1.5.2轴控制信号连接原理...........................................................................................................7§1.5.3伺服使能信号连接原理........................................................................................................7§1.6VOUT/PWM输出选择.................................................................................................................8§1.7附加编码器接口..........................................................................................................................8§1.8通用数字IO信号.........................................................................................................................9§1.9防干扰措施................................................................................................................................12§1.109030卡易损元器件.................................................................................................................12第二章编程指南.....................................................................................................................................14§2.1一般说明.....................................................................................................................................14§2.2软件的安装.................................................................................................................................14§2.3编译与联接(COMPILINGANDLINKING)..................................................................................15§2.3.1MicrosoftVisualC++.....................................................................................................15§2.3.2MicrosoftVisualBASIC..................................................................................................15§2.3.3BorlandDelphi..................................................................................................................16§2.3.4BorlandC++Builder........................................................................................................16§2.49030卡工作原理.......................................................................................................................16§2.5库函数介绍................................................................................................................................18§2.5.1初始化函数.......................................................................................................................18§2.5.2轴工作模式设定函数........................................................................................................18§2.5.4单轴运动控制函数...........................................................................................................19§2.5.5轴随动运动控制函数........................................................................................................20§2.5.6位置捕捉函数...................................................................................................................21§2.5.7插补函数...........................................................................................................................22§2.5.8插补疑问...........................................................................................................................25§2.5.9其它说明...........................................................................................................................34§2.5.10库函数一览表.................................................................................................................36§2.6NURBS曲线................................................................................................................................41§2.6.1NURBS曲线概论..............................................................................................................42§2.6.2NURBS曲线插补工作流程..............................................................................................43§2.6.3精度与速度控制...............................................................................................................443\n§2.6.4编程说明...........................................................................................................................46§2.6.5NURBS曲线的计算..........................................................................................................46第三章库函数详解..............................................................................................................................48§3.1初始化函数.................................................................................................................................48§3.1.1InitCard_9030................................................................................................................48§3.1.2ExitCard_9030...............................................................................................................49§3.2轴常规设定函数.........................................................................................................................49§3.2.2SetAxisWorkMode_9030...................................................................................................50§3.2.3SetAxisIO_9030.................................................................................................................50§3.2.4SetAxisOutMode_9030......................................................................................................52§3.2.5SetEncoderX4X1_9030......................................................................................................53§3.4轴状态读取函数.........................................................................................................................54§3.4.1ReadAxisTheoryPos_9030.................................................................................................54§3.4.2ReadAxisEncodePos_9030................................................................................................55§3.4.3ReadAxisPos_9030..........................................................................................................55§3.4.4ReadAxisTECV_9030......................................................................................................56§3.4.5ReadAxisVel_9030..........................................................................................................57§3.4.6ReadAxisState_9030........................................................................................................57§3.4.7IsPosCatch_9030............................................................................................................59§3.4.8ReadCatchPos_9030.......................................................................................................59§3.4.9ResetPosCatch_9030.......................................................................................................60§3.5轴螺距误差补偿设置函数.........................................................................................................61§3.5.1SetAxisTEC_9030..............................................................................................................61§3.5.2SetAxisTECData_9030......................................................................................................62§3.5.3SetAxisTECWork_9030.....................................................................................................64§3.6单轴运动控制函数.....................................................................................................................65§3.6.1SetAxisPos_9030............................................................................................................65§3.6.2SetAxisVel_9030.............................................................................................................66§3.6.3SetAxisStartVel_9030.....................................................................................................67§3.6.4SetAxisStopVel_9030......................................................................................................68§3.6.5SetAxisDec_9030............................................................................................................68§3.6.6SetAxisAcc_9030............................................................................................................69§3.6.7SetAxisSAcc_9030..........................................................................................................70§3.6.8StartAxis_9030................................................................................................................71§3.6.9StartAxisVel_9030...........................................................................................................72§3.6.10AbortAxis_9030...............................................................................................................72§3.6.11SetAxisStopDec_9030......................................................................................................73§3.6.12StopAxis_9030.................................................................................................................744\n§3.6.13CeaseAxis_9030...............................................................................................................75§3.6.14Home_9030......................................................................................................................75§3.6.15HomeFB_9030.................................................................................................................76§3.6.16GoHome_9030.................................................................................................................77§3.6.17LookZIndex_9030............................................................................................................79§3.6.18SetAxisOffset_9030..........................................................................................................80§3.6.19SetAxiFBOffset_9030.......................................................................................................81§3.6.20SetAxisPEL_9030............................................................................................................82§3.7电子齿轮与位置跟随..................................................................................................................83§3.7.1StartAxisEGear_9030........................................................................................................83§3.7.2SetActiveEncoder_9030.....................................................................................................84§3.7.3SetAxisFE_9030.................................................................................................................85§3.7.4CancelAxisFEG_9030.......................................................................................................86§3.7.5GetEnAuto0Flag_9030....................................................................................................87§3.7.6ResetEn0Flag_9030.........................................................................................................88§3.8.4SetAxisMotorOnOff_9030.....................................................................................................89§3.9通用IO读写函数......................................................................................................................89§3.9.1Set_Emergency_Stop_9030.............................................................................................89§3.9.2ReadIO_9030...................................................................................................................90§3.9.3ReadIOBit_9030..............................................................................................................91§3.9.4WriteIo_9030...................................................................................................................91§3.9.5WriteIoBit_9030..............................................................................................................92§3.9.6ReadOs_9030...................................................................................................................93§3.9.7ReadOsBit_9030..............................................................................................................94§3.9.8ReadMPGIO_9030..........................................................................................................95§3.10附加编码器控制函数..............................................................................................................95§3.10.1ReadEncoderPos_9030..................................................................................................95§3.10.2HomeEncoder_9030......................................................................................................96§3.10.3SetEncodeCount_9030...................................................................................................97§3.11PWM脉冲/DA输出控制........................................................................................................97§3.11.1PwmOut_9030...............................................................................................................97§3.11.2PwmOut2_9030.............................................................................................................98§3.11.3PwmStop_9030..............................................................................................................99§3.11.4DAOut_9030................................................................................................................100§3.12插补函数.................................................................................................................................101§3.12.1插补初始化函数...........................................................................................................101§3.12.1.1LM_SetXAxis_9030..............................................................................................................101§3.12.1.2LM_OffXAxis_9030..............................................................................................................1025\n§3.12.1.3LM_GetXStartPos_9030.....................................................................................................103§3.12.1.4LM_GetAxisStartPos_9030.................................................................................................104§3.12.2插补顺序执行函数.......................................................................................................105§3.12.2.1LM_Line_9030....................................................................................................................105§3.12.2.2LM_LineMaxV_9030...........................................................................................................106§3.12.2.3LM_LineMeasure_9030......................................................................................................107§3.12.2.4LM_GetMeasureState_9030................................................................................................109§3.12.2.5LM_LineFE_9030...............................................................................................................109§3.12.2.6LM_ArcCW_9030...............................................................................................................112§3.12.2.7LM_Wait_9030....................................................................................................................115§3.12.2.8LM_PWM_9030..................................................................................................................116§3.12.2.9LM_IOOut_9030.................................................................................................................117§3.12.2.10LM_Wait_I_9030................................................................................................................117§3.12.2.11LM_End_9030.....................................................................................................................118§3.12.3插补控制函数...............................................................................................................119§3.12.3.1LM_SetACCDec_9030........................................................................................................119§3.12.3.2LM_SetSAccPower_9030....................................................................................................120§3.12.3.3LM_Start_9030...................................................................................................................120§3.12.3.4LM_CleanBuff_9030...........................................................................................................121§3.12.3.5LM_GetBuffLen_9030.........................................................................................................122§3.12.3.6LM_SetMinVel_9030...........................................................................................................122§3.12.3.7LM_SetMaxVel_9030..........................................................................................................123§3.12.3.8LM_SetParaAngle_9030.....................................................................................................124§3.12.3.9LM_GetLineNO_9030.........................................................................................................125§3.12.3.10LM_GetFactVel_9030.........................................................................................................125§3.12.3.11LM_SetPauseTime_9030...................................................................................................126§3.12.3.12LM_Pause_9030.................................................................................................................127§3.12.3.13LM_Resume_9030.............................................................................................................128§3.12.3.14LM_SetSpeedRate_9030....................................................................................................128§3.12.3.15LM_LineEnd_9030............................................................................................................129§3.12.3.16LM_GetState_9030............................................................................................................130§3.12.3.17LM_SetSysPara_9030.......................................................................................................131§3.12.3.18LM_SetAxisMaxErrLtd_9030............................................................................................131§3.12.3.19LM_SetSpeedPri_9030......................................................................................................132§3.12.3.20LM_GetFEnState_9030.....................................................................................................133§3.12.4Nurbs曲线插补函数....................................................................................................134§3.12.4.1LM_SetNurbsScanMode_9030............................................................................................134§3.12.4.2LM_SetNurbsVelCtrl_9030.................................................................................................1346\n§3.12.4.3LM_SetNurbsAccDec_9030.................................................................................................135§3.12.4.4LM_SetNurbsCompCoef_9030............................................................................................136§3.12.4.5LM_NurbsInit_9030.............................................................................................................137§3.12.4.6LM_NurbsData_9030..........................................................................................................137§3.12.4.7LM_Nurbs_9030..................................................................................................................138§3.12.4.8LM_Nurbs4Axis_9030.........................................................................................................139§3.12.4.9LM_SendNurbsData_9030..................................................................................................140§3.12.4.10LM_GetNurbsExecPara_9030...........................................................................................140§3.12.4.11LM_GetNurbsInBuffLen_9030...........................................................................................141§3.12.4.12LM_GetNurbsErrorNo_9030.............................................................................................142§3.12.4.13Set_NurbsInit_9030...........................................................................................................143§3.12.4.14Set_NurbsData_9030.........................................................................................................144§3.12.4.15Set_NurbsEnd_9030..........................................................................................................144§3.12.4.16Get_NurbsPos_9030..........................................................................................................145§3.12.4.17Set_NurbsPosVB_9030......................................................................................................146§3.12.4.18Get_NurbsLen_9030..........................................................................................................147§3.12.4.19Get_NurbsErrorNo_9030..................................................................................................148§3.12.4.20LM_SetForceCtrl_9030.....................................................................................................149§3.13状态读取函数.........................................................................................................................149§3.13.19030卡有关版本信息读取...........................................................................................149§3.13.1.1ReadFirmwareVersion_9030...............................................................................................149§3.13.1.2ReadDllVersion_9030..........................................................................................................150§3.13.1.3GetDriverVersion_9030.......................................................................................................150§3.13.2获取错误号GetErrorNo_9030.......................................................................................151附录ANURBS曲线详解..................................................................................................................1537\n\n第一章硬件指南§1.1概述北京东方嘉宏公司生产的9030系列控制卡,是基于USB2.0接口、硬件核心为FPGA+SOPC架构的高性能电机控制卡,由于USB接口固有的安装方便性,它可广泛应用于数控机床、工业机器人、民用雕刻机、木工机械、印刷机械、装配生产线及其他产业机械等广泛领域。§1.29030规格表9030电机控制卡规格表硬件指标:总线形式USB2.0控制轴数4轴轴控制输出模式脉冲/模拟量可设定最高脉冲输出频率:4Mhz差分输出编码器输入4路四倍频增量式最高频率:6.25Mhz辅助编码器输入1路四倍频增量式最高频率:6.25MhzPWM/模拟量1路PWM输出:PWM输出:辅助输出端口PWM/模拟量可设定1Hz~1MHz可控制激光能量PWM分辨率不小于1%模拟量输出:模拟量:可控制主轴转速-10~+10V输出精度:12位IO量输出点8+4,12路8路达灵顿4路光电开关IO量输入点32路全部光电隔离软件功能单轴控制功能单轴点位控制单轴速度控制单轴回HOME点1\n多轴控制功能多轴电子齿轮功能编码器跟随功能多轴插补功能4轴线性/圆弧插补4轴直线插补任意2圆弧+2轴直线插补3轴/4轴NURBS样条曲线插补插补模式的编码器跟可实现硬攻丝随功能先进的插补预处理功内部4096+88行插补自动完成插补速度规能数据双缓冲区划插补速度调节/随时0-160%随时调节1%精度调节暂停用户开发环境WindowsXp以上系VB、VC、BCB、Delphi统四种语言开发库WinCNC支持我公司功能强大的数控系统软件9030控制卡主板外形尺寸批注[yzh1]:改图2\n§1.3控制卡的安装完整的9030卡它包含以下内容:①9030主板一块,USB电缆一根②光盘一张,9030使用手册一本③其它配件(插头、短路棒等)在安装控制卡前,请确保计算机USB接口为2.0版本。通过USB2.0电缆连接9030卡与PC机,安装9030的驱动程序。9030卡的驱动程序支持Win9x、Win2000、WinXp、WinVista,在安装驱动程序时请在光盘的9030\driver文件夹中寻找。§1.4控制卡的硬件连线9030卡通过端子板展开其硬件连线,在本节中将着重介绍有关9030硬件连线原理。3\nUSB接口+5VGND此+5V、+24V、GNDGND接外部电源+24VX轴JD1J10PWM/DA输出选择跳线J9321PWMPWM输出或-10V~GND+10V模拟量输出;-轴+12V10V~+10VDA模拟-12V控Y轴JD2量输出时,需外接12V信电源,同时接上GND.号接口Z轴JD3通用IO输出点信号图通用IO输入点信号图W轴JD4JD5JD6手脉接口37针IO接口在上图中:*+5V接外部电源+5V端*+24V外接24V直流电源*JD1~JD4为轴控信号接口*JD5为手摇脉冲发生器接口,,共有8路输入*JD6为37针通用IO输出接口,共有24路输入/8路输出*J9、J10跳线可改变输出方式为PWM输出或AD模拟量输出*PWM/GND提供一路PWM信号输出或-10V~+10V模拟量输出。-10V~+10V模拟量输出时,需外接12V电源,同时接上GND.4\n§1.5电机控制信号9030卡各轴可分别通过两种方式控制电机运动:开环控制、步进电机+编码器。JD1-JD4轴控信号接口(15针)说明如下:A-1A+9B-2B+10Z-3Z+11+5V4PULS12/PULS5SIGN13/SIGN6ALM14GND7SVon15SV_COM8外壳15针接头(轴控信号的插头)的外壳与伺服驱动器信号线缆的屏蔽层有效连接图1.3.1轴控信号接口图表1.管腿名称定义解释A-编码器输入信号编码器反馈信号。当9030卡以开环模式A+编码器输入信号工作时无效;当9030卡以半闭环控制模B-编码器输入信号式工作时有效。B+编码器输入信号Z-编码器输入信号Z+编码器输入信号+5V+5V电源PLUS轴差分脉冲输出+5\n/PLUS轴差分脉冲输出-SIGN轴差分方向输出+/SIGN轴差分方向输出-ALM报警输入可接报警信号。如:驱动器报警。实际GND报警输入地输入口对应:X轴→I21(ALM0)、Y轴→I22(ALM1)、Z轴→I23(ALM2)、W轴→I24(ALM3)。参看第10页SVon伺服使能信号+SVCOM伺服使能信号-外壳15针接头外壳(GND)15针接头(轴控信号的接头)的外壳与伺服驱动器信号线缆的屏蔽层有效连接§1.5.1伺服编码器输入连接方法图1.3.1中A+、A-、B+、B-、Z+、Z-为伺服编码器输入信号。连接图如下:9030卡内部图1.3.2编码器差分输入信号连接图6\n§1.5.2轴控制信号连接原理图1.3.3脉冲量控制输出信号连接图§1.5.3伺服使能信号连接原理9030卡内部图1.3.5伺服使能信号连接图批注[yzh2]:有疑问7\n§1.6Vout/PWM输出选择9030有一路PWM或DA模拟量输出,通过端子板上的跳线J9、J10来选择是PWM输出还是DA输出。如下:DA输出时跳线J10、J9(标号1、2跨接)如下:J10J9PWM输出时跳线J10、J9(标号3、2跨接)如下:J10J9§1.7附加编码器接口15针接口示意图:A+1A-9B+2B-10GND3+5V11I254I26(Xsel)12I27(Ysel)5I28(Zsel)13I29(Asel)6I30(Multi×1)14I31(Multi×10)7I32(Multi×100)15GND8端口定义如下:8\n管腿名称定义解释1A+接编码器A+9A-接编码器A-(编码器单端输入可不接)2B+接编码器B+10B-接编码器B-(编码器单端输入可不接)3GND电源地11+5V+5V电源4I2512I26(Xsel)通用输入(X轴选,MPG_I1)5I27(Ysel)通用输入(Y轴选,MPG_I2)13I28(Zsel)通用输入(Z轴选,MPG_I3)6I29(Asel)通用输入(第四轴轴选,MPG_I4)14I30(Multi×1)通用输入(倍率×1,,MPG_I5)7I31(Multi×10)通用输入(倍率×10,MPG_I6)15I32(Multi×100)通用输入(倍率×100,MPG_I7)8COM(GND)针对4、12、5、13、6、14、7、15信号的公共端原理图见下页§1.8通用数字IO信号1、通用37针IO信号接口JD6管脚定义:9\nI81I920I72I1021I63I1122I54I1223I45I1324I36I1425I27I1526I18I1627GND9GND28I2010I1929I1811I1730GND12I21(ALM0)31I22(ALM1)13I23(ALM2)32I24(ALM3)14O833O715O634O516O435O317O236O11824V3724V1910\n2、通用数字IO信号原理图该部分输入点原理图适用于通用IO及附加编码器接口中的输入点。9030接收无源节点作为输入信号。当开关有效时,由内部+5V给光耦供电。输入点原理图+5V+5VEXMCUI1-I32开关9030内部电路GND当输入点是光电开关类型的传感器时,请选用NPN型。如光电开关输出为24V电压信号,需通过继电器转换为通断信号后,再用继电器的常开或常闭点连接9030的输入点。接线原理图如下:I1~I20DC12~24V+o-COM11\n输出点原理图+24V+5VImax=500mAOUT1-8COM9030内部电路Darlington§1.9防干扰措施请务必做好以下防干扰措施!①伺服驱动器信号线缆均选用屏蔽线缆,并将伺服驱动器外壳与信号线缆屏蔽层有效连接。②9030卡15针接头(轴控信号的接头)的外壳与伺服驱动器信号线缆屏蔽层有效连接。③伺服驱动器外壳与24V直流电源共地。§1.109030卡易损元器件①达林顿管驱动芯片2803正确连接IO输出可保证达林顿管驱动芯片2803的正常工作。②差分滤波芯片75175务必做好防干扰措施,否则可能因信号干扰造成差分滤波芯片75175的损坏。12\n达林顿管驱动芯片28034个差分滤波芯片7517513\n第二章编程指南§2.1一般说明在随9030卡提供给用户的光盘中可找到以下文件夹:[光盘]:------9030||-----Driver|-----Setup|-----WinCNC在Driver中提供了9030的驱动程序,包括Win9x、Win2000、WinXp三种平台。在Setup中提供了Windows32位动态连接库DLLs,支持MicrosoftVisualBASIC、VisualC++及BorlandDelphi、C++Builder。还有一些测试及示例程序。在WinCNC中提供了基于9030卡的CNC机床数控软件WinCNCfor9030Demo(演示版)。§2.2软件的安装在光盘的9030\Setup文件夹中运行setup程序即开始安装软件。setup程序将提示安装目标盘和安装目录,该程序的省却安装目录为:C:\9030在该目录下,分别有9030\VB、9030\VC、9030\Delph、9030\Bcb子目录,它们分别对应MicrosoftVisualBASIC、MicrosoftVisualC++、BorlandDelphi、BorlandC++Builder等编程环境。在这些目录下有以下文件:表2.19030\VB文件一览表文件名解释Declare.basVB窗体函数声明文件dfjzh9030.bix9030接口固件9030Test.EXE9030卡测试软件9030Test9030卡测试软件的VB源程序表2.29030\VC文件一览表14\n文件名解释dfjzh9030dll.dllVC动态联接库dfjzh9030dll.libVC联接库dfjzh9030dll.hVC函数声明文件dfjzh9030.bix9030接口固件9030Demo.EXE9030卡演示软件9030Demo9030卡演示软件源程序表2.39030\Delphi文件一览表文件名解释Dfjzh9030Api.DLLDelphi动态联接库drv9030.pasDelphi函数声明文件表2.49030\Bcb文件一览表文件名解释dfjzh9030dll.dllC++Builder动态联接库dfjzh9030dll.libC++Builder联接库dfjzh9030dll.hC++Builder函数声明文件dfjzh9030dyn.hC++Builder函数声明文件,动态调用Dll的头文件§2.3编译与联接(CompilingandLinking)这一节将说明如何使用9030的函数库,该函数库是以Windows32位动态连接库DLLs的形式提供给用户的。§2.3.1MicrosoftVisualC++用户在用VC编写程序时,首先将9030动态联接库dfjzh9030dll.dll拷贝到Windows系统目录,比如C:\Windows\System,或拷贝到VC的工作目录。然后将dfjzh9030dll.lib及头文件dfjzh9030dll.h包含在工程项目中,这样用户就可以使用9030的库函数了。§2.3.2MicrosoftVisualBASIC用户在用VB编写程序时,首先将9030动态联接库Dfjzh9030Api.dll拷贝到Windows系统目录,比如C:\Windows\System,或拷贝到VB的工作目录。然后在窗体的通用说明区对9030库函数进行说明,这样用户就可调用9030的库函数对9030卡进行编程。15\n§2.3.3BorlandDelphi用户在用BorlandDelphi编写程序时,可按照如下步骤操作:1)把dfjzh9030Api.dll拷贝到Windows系统目录,比如C:\Windows\System,或拷贝到当前工作目录;2)把drv9030.pas文件拷贝到工作目录;3)打开delphi编辑环境,打开应用程序项目文件;4)打开delphi编辑环境中的“Project”菜单,点击“Addtoproject...”,把drv9030.pas文件添加到应用程序的项目文件中;5)调出应用程序项目文件中使用9030卡工作的单元,点击“File”菜单,用该菜单下的“useunit...”把drv9030.pas单元包括进去;6)然后就像使用一般的系统库函数一样使用dfjzh9030Api.dll中的函数即可。§2.3.4BorlandC++Builder在我们提供的C++Builder应用9030的例子中,采用动态调用Dll的方法,C++Builder动态调用Dll的步骤如下:1)从新定义函数。我们已做,用户只需包含dfjzh9030dyn.h头文件即可。2)载入Dll,用LoadLibrary函数。3)获取函数地址,用GetProcAssress函数。4)强制类型转换,即将所获取的函数地址强制转换为函数。5)函数调用。6)释放Dll。C++Builder动态调用Dll稍显复杂,更详细说明请看C++Builder参考书(比如:《C++Builder编程技巧、经验与实例》人民邮电出版社)。C++Builder静态调用Dll的步骤与VC类似,在此不再赘述。§2.49030卡工作原理⑴9030卡硬件工作原理框图16\n9030主卡PC机(上位机)FPGAALTERAEP1C12C驱USB接语动USB2.0言程口芯片SOPC(嵌入式CPU)函序数68013100MHzNiosCPU库总线接口电路⑵9030卡软件工作原理框图CPU工作循环开始CPU中断响应来自执行上位机命令C上位机的命令,读取驱语动有关数据,并在下一单轴多轴跟随运动控制运算言程个循环开始时执行函序数多轴插补控制运算库(动态链数据交换区接FPGA(内部)对上位机的数据更新库)等待下一次定时中断返回工作循环开始处(每1.0毫秒中断一次)如上图所示,在FPGA中开辟有嵌入式CPU与PC机的数据交换区,PC需要读取的数17\n据(轴位置、速度、轴状态、插补状态及IO等),DSP会每1.0毫秒更新一次;而PC机在写入数据和命令时,先将数据写入数据交换区,然后向CPU发出中断信号通知CPU读取或执行命令。§2.5库函数介绍9030驱动函数库中总共有100多个函数,这些函数可粗分类为初始化函数、单轴运动控制函数、多轴电子齿轮函数、检测函数、插补函数及NURBS样条曲线插补函数。每个函数的详细介绍在本书的第三章中给出。在用户编制自己的程序时,我们建议用户参考我们所提供的示例程序,这些示例程序将使你省去很多例行工作。§2.5.1初始化函数在调用函数库的各个函数之前,第一步必须对函数库进行初始化。初始化函数为InitCrad_9030,该函数的第一个参数为板号,其它参数见第三章中详细说明。用户如果用到多个9030板,则每个板都必须初始化。9030的驱动程序最多支持16个轴,用户最多可同时使用4块9030板,板号为:0-3(保留功能)。当在一台计算机中用到多块9030卡时,9030卡的板号由其USB插槽位置决定(保留功能)。在用户程序退出前,必须调用ExitCard_9030()函数,释放函数库。当用到多个板时要一一释放,其释放次序是:最先初始化的最后释放,最后初始化的最先释放。§2.5.2轴工作模式设定函数9030卡的每个轴均可工作在如下模式:0=轴无效;1=开环脉冲模式;2=位置闭环脉冲输出模式;设定函数为:SetAxisWorkMode_90301=开环脉冲模式;可接步进电机、伺服电机(伺服电机工作在位置模式下)。2=位置闭环脉冲输出模式;可接步进电机(带编码器反馈元件的特殊步进电机)、伺服电机(伺服电机工作在位置模式下)。18\n当轴工作在1、2模式下,轴的位置单位用脉冲数表示、速度单位用赫兹表示。§2.5.4单轴运动控制函数9030板提供了轴的两种基本运动形式,即轴的点到点的运动控制(位置模式)和速度控制(速度模式)。位置模式时,当用户在程序中写下如下语句:SetAxisAcc_9030(0,0,4000);SetAxisVel_9030(0,0,1000);SetAxisPos_9030(0,0,xPosSet);StartAxis_9030(0,0);0号轴将以最大1000Hz的频率发2000个脉冲,速度曲线如下:速度最大速度(1000Hz)减速阶段加速度为:4000Hz/S加速阶段,加速度为:4000Hz/S时间速度曲线(梯形包络线)上图为梯形包络线,它的加减速值相等。该梯形的面积就是电机转动的距离(2000个步距角)。由于步进电机所带负载有一定的机械惯性质量,速度不可能立刻达到设定值,所以应有加减速阶段。在电机运行时,可随时改变梯形包络线的参数,可走出更复杂的运动轨迹,如下图所示:速度改变最大速度改变目标位置19时间\n复杂的梯形包络线用户也可以用速度模式来控制电机轴运动,速度模式函数为:shortStartAxisVel_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longvelocity);该函数的第一个参数为卡号0、1、2……,第二个参数为轴号0、1、2……,第三个参数为速度参数,单位为脉冲频率(Hz脉冲数/秒),可设正负。速度模式下的电机速度曲线如下:速度改变最大速度改变速度大小及方向时间速度模式曲线速度模式的曲线类似于位置模式,但它没有终点值,用户可随时用轴停止命令函数(AbortAxis_9030、StopAxis_9030、CeaseAxis_9030)命令电机停止运行。在实际编程当中,用户可随时改变步进电机为位置模式或为速度模式。§2.5.5轴随动运动控制函数9030板提供了轴的两种两种随动运动形式,即从动轴随动主动轴(电子齿轮)、轴随动编码器(编码器控制模式)。在电子齿轮模式下,通过函数:SetAxisEGear_9030(Board_NO,Axis_No,F_Axis_No,Rate,Kp);来设定主从关系、齿轮比等。主从关系可随意设定,只要不违反自己随自己或父子孙的20\n伦理关系就可以。齿轮比很广,在0.001至1000之间,可正负。电子齿轮随动关系,举例如下图:主动轴从动轴在编码器控制模式下,通过函数:SetAxisFE_9030(Board_NO,Axis_No,Rate,Kp,Mode1,Mode2,Mode3);来设定轴跟随编码器,可以是速度方式或位置方式等。另外,在插补模式下也可设轴跟随编码器,这为用户编写带螺纹切削功能的数控系统提供方便。§2.5.6位置捕捉函数9030控制卡提供了4个轴的位置捕捉功能。具体函数和使用步骤如下:1.通过函数SetAxisIO_9030设置轴位置捕捉触发信号的输入点。2.通过函数IsPosCatch_9030检测轴位置捕获标志位。3.通过函数ReadCatchPos_9030读取触发时刻的轴位置。4.通过函数ResetPosCatch_9030复位轴位置捕获标志位,准备下一次位置捕捉。注意事项:(1)每个轴的位置捕捉触发信号输入点的位置固定不变:输入点I17、I18、I19、I20(参看§1.4控制卡的硬件连线节)分别对应0、1、2、3轴。(2)由于硬件资源的关系,9030的每个轴实际只有两个32位位置寄存器,它们分别是轴理论位置值位置寄存器(函数ReadAxisTheoryPos_9030读取),轴编码器反馈位置寄存器(函数ReadAxisEncodePos_9030读取)。当轴位置捕获标志位有效时(通过函数IsPosCatch_9030获得),函数ReadCatchPos_9030将会返回触发时刻的轴位置,这时轴的捕捉位置将临时占据轴实际两个位置寄存器中的的一个。如前所述,9030卡的每个轴均可工作在如下模式:21\n0=轴无效1=开环脉冲模式2=位置闭环脉冲输出模式在模式1时,捕捉位置值将临时占据轴的编码器反馈位置寄存器,在模式2时,捕捉位置值将临时占据轴的理论位置寄存器,函数ResetPosCatch_9030将解除这种临时占据。§2.5.7插补函数在实际应用中,有可能需要几个电机轴按一定轨迹同时运动,最典型的是数控机床应用,比如:在数控铣床中的XYZ坐标系中,要求机床的XYZ轴运行一段直线或一段圆弧或一段空间螺旋线等,这种几个电机轴按一定轨迹同时运动的方式就是所谓的插补运动。在9030卡的插补引擎中虚拟了四个轴,即X、Y、Z、W轴,组成一个XYZW坐标系。这四个虚拟轴如何对应卡上的四个实际轴完全由用户控制,而且它们的编程单位是按实际应用单位实现的(即:用户单位,由用户指定是毫米、还是角度或是角弧度等)。针对数控机床的实际应用,9030卡对插补函数进行了如下优化:1.虚拟坐标轴,用户可方便组成2轴、3轴或4轴数控系统2.用户单位编程,编程直观,中间单位转换的计算量最小。3.绝对值编程,没有累计误差和计算误差4.小线段连续插补算法先进,在曲线或曲面加工时有显著优势。5.实现不同平面的圆弧插补和螺旋线插补。6.实现4轴线性和4轴圆弧(2轴直线;既螺旋线)插补。7.实现插补模式下的轴位置跟随编码器(螺纹切削、硬攻丝)。8.实现3轴、4轴NURBS曲线插补插补。9030插补函数库相对独立,所有插补函数均以字母LM打头,按作用可分为参数设定函数、状态检测函数、实际操作函数、插补顺序执行函数。它们的函数原型如下:参数设定函数:设置插补引擎参数:shortLM_SetMinVel_9030(….);设置插补引擎参数:shortLM_SetMaxVel_9030(….);设置插补引擎参数:shortLM_SetSpeedPri_9030(….);设置插补引擎参数:shortLM_SetParaAngle_9030(….);设置插补引擎参数:shortLM_SetSysPara_9030(….);设置插补引擎参数:shortLM_SetAxisMaxErrLtd_9030(….);22\n设置某轴与插补X匹配:shortLM_SetXAxis_9030(….);撤消插补X匹配:shortLM_OffXAxis_9030();设置某轴与插补Y匹配:shortLM_SetYAxis_9030(….);撤消插补Y匹配:shortLM_OffYAxis_9030();设置某轴与插补Z匹配:shortLM_SetZAxis_9030(….);撤消插补Z匹配:shortLM_OffZAxis_9030();设置某轴与插补W匹配:shortLM_SetWAxis_9030(….);撤消插补W匹配:shortLM_OffWAxis_9030();设置插补加减速:shortLM_SetACCDec_9030(….);设置插补S形加减速:shortLM_SetSAccePower_9030(….);设置Nurbs曲线插补预处理的扫描模式:shortLM_SetNurbsScanMode_9030(….);设置Nurbs曲线插补时的速度控制:shortLM_SetNurbsVelCtrl_9030(….);设置Nurbs曲线插补加速度和减速度:shortLM_SetNurbsAccDec_9030(….);设Nurbs曲线插补误差补偿系数:shortLM_SetNurbsCompCoef_9030(….);状态检测函数:返回插补命令缓冲区长度:shortLM_GetBuffLen_9030(….);返回插补状态:shortLM_GetState_9030(….);返回插补测量状态:shortLM_GetMeasureState_9030(….);返回当前插补行号:shortLM_GetLineNO_9030(….);返回插补编码器跟随状态:shortLM_GetFEnState_9030(….);读取NURBS曲线插补运行参数值:floatLM_GetNubrsExecPara_9030(….);获得在插补缓冲区中有几条Nurbs曲线:shortLM_GetNurbsInBuffLen_9030(….);获得产生Nurbs曲线插补错误的编号:shortLM_GetNurbsErrorNo_9030(….);实际操作函数:23\n清空插补缓冲区:shortLM_CleanBuff_9030(….);暂停插补运算:shortLM_Pause_9030(….);恢复插补运算:shortLM_Resume_9030(….);变更插补速度:shortLM_SetSpeedRate_9030(….);插补到当前行结束停止:shortLM_LineEnd_9030(….);插补开始:shortLM_Start_9030(….);获得插补开始位置X轴:shortLM_GetXStartPos_9030(….);Y轴:shortLM_GetYStartPos_9030(….);Z轴:shortLM_GetZStartPos_9030(….);W轴:shortLM_GetWStartPos_9030(….);向9030卡传输NURBS曲线数据:shortLM_SendNurbsData_9030(….);插补顺序执行函数:插补结束命令:shortLM_End_9030(….);线性插补命令:shortLM_Line_9030(….);线性插补命令:shortLM_LineMaxV_9030(….);线性插补测量命令:shortLM_LineMeasure_9030(….);线性插补跟随编码器位置:shortLM_LineFE_9030(….);圆弧/螺旋线插补命令(顺圆):XY平面:shortLM_ArcCW_9030(….);ZX平面:shortLM_ArcCW_ZX_9030(….);YZ平面:shortLM_ArcCW_YZ_9030(….);圆弧/螺旋线插补命令(逆圆):XY平面:shortLM_ArcCCW_9030(….);ZX平面:shortLM_ArcCCW_ZX_9030(….);YZ平面:shortLM_ArcCCW_YZ_9030(….);NURBS曲线插补命令:初始化Nurbs曲线:shortLM_NurbsInit_9030(….);设Nurbs曲线插补数据:shortLM_NurbsData_9030(….);Nurbs曲线插补命令(3轴):shortLM_Nurbs_9030(….);Nurbs曲线插补命令(4轴):shortLM_Nurbs4Axis_9030(….);插补等待命令:shortLM_Wait_9030(….);24\n插补等待输入点命令:shortLM_Wait_I_9030(….);插补输出IO点命令:shortLM_IOOut_9030(….);插补输出PWM命令:shortLM_PWM_9030(….);有关NURBS曲线计算的函数:初始化Nurbs曲线,为Nurbs曲线计算做准备:shortSet_NurbsInit_9030(….);设Nurbs曲线计算数据:shortSet_NurbsData_9030(….);设Nurbs曲线数据结束:shortSet_NurbsEnd_9030(….);计算Nurbs曲线轴位置(型值点)坐标:shortGet_NurbsPos_9030(….);计算Nurbs曲线长度:doubleGet_NurbsLen_9030(….);获得产生Nurbs曲线计算错误的编号:shortGet_NurbsErrorNo_9030(….);使用插补函数的一般步骤如下:1.设置插补引擎参数、设置某些轴与插补虚拟XYZW轴匹配、设置插补加速度和减速度。2.获得插补轴开始位置(通过LM_GetXStartPos_9030等命令)3.写入插补顺序执行命令(通过直线、圆弧等插补命令写入插补缓冲区)。4.插补开始(通过插补开始命令LM_Start_9030(….);5.根据需要,循环或定时检测插补缓冲区,如果不满,可继续写入插补顺序执行命令。注意:在步骤1和2时,注意相关轴必须是停止状态。在写入插补顺序执行命令时,是写入插补缓冲区中,该插补缓冲区的长度为4096行,即一次最多可写4096行插补顺序执行命令。插补引擎会按照写入顺序一行一行执行,直到碰到插补结束命令(LM_End_9030)或插补缓冲区空。用户也可用轴停止命令(AbortAxis_9030、StopAxis_9030、CeaseAxis_9030)来终止插补引擎工作。在插补引擎工作时也可随时暂停插补轴运动(用LM_Pause_9030命令)和恢复插补运动(用LM_Resume_9030命令)。在插补轴运动时也可用LM_SetSpeedRate_9030命令随时改变插补速度。§2.5.8插补疑问(1)插补运算的单位是什么25\n距离是:用户单位;速度是:用户单位/分钟;加速度是:用户单位/秒平方在用户设置某轴与插补虚拟的X、Y、Z、W轴进行匹配时(用LM_SetXAxis_9030及YZW各轴相关函数),函数LM_SetXAxis_9030中将代入该轴的脉冲当量,脉冲当量就是:该轴的电信号发一个脉冲,对应该轴实际移动多少用户单位。比如,某一直线轴通过滚珠丝杠与电机直联,该滚珠丝杠的螺距是5毫米,而电机转一圈需2000个脉冲,则:轴的脉冲当量=5/2000=0.0025;0.0025的含义是:一个脉冲将使该轴移动0.0025毫米。轴的脉冲当量很重要,轴的脉冲当量确定后,则该轴的用户单位就确定,在上例中轴的用户单位就是毫米。在实际插补中,插补速度是几个轴的合成速度,即矢量速度。这种情况稍微复杂,解释如下:比如,X、Y两轴要插补运动,X、Y联在一个十字滑台上,即它们都是直线运动轴,它们的脉冲当量有可能不一样,但它们的用户单位是一样的,都是毫米,这时它们的插补矢量单位也是毫米,毫不含糊。矢量速度就是:毫米/分钟。如果,X、W两轴要插补运动,X联在一个直线轴,W联在一个旋转轴上,这时不管它们的脉冲当量是否一样,但它们的用户单位是不一样的,一个是毫米,一个是度,这时它们的插补矢量单位就很不直观,是毫米?还是度?不管怎样理解,它们的插补运动按设置的轨迹严格执行的。例如编程如下(C语言):LM_SetXAxis_9030(0,0,0.0025,0.01);//0轴与X轴匹配,脉冲当量是:0.0025,直线轴LM_SetWAxis_9030(0,3,0.089,0.01);//3轴与W轴匹配,脉冲当量是:0.089,旋转轴LM_SetACCDec_9030(0,5000,5000);//设置插补加速度和减速度LM_GetXStartPos_9030(0,NULL);//获得X轴插补开始位置,假如是0LM_GetWStartPos_9030(0,NULL);//获得W轴插补开始位置,假如是0LM_Line_9030(0,100,0,0,360,1000,100);//X轴终点位置是100,W轴是360,//速度1000/分钟LM_End_9030(0);//插补结束LM_Start_9030(0,0);//开始插补上例中,虽然插补矢量单位不明确,但并不影响X、W两轴准确的按线性比例的运行到100、360的位置。(2)在插补开始前,为什么要获得轴插补开始位置9030卡的插补运算是在一个虚拟的XYZW坐标系中进行,其插补函数位置坐标全是绝26\n对坐标,所以在插补开始前,首先要确定起点。函数LM_GetXStartPos_9030(及对应的Y、Z、W轴函数)指示9030卡,X、Y、Z、W轴的当前位置为插补起始点。在后面可以看到,插补顺序执行函数所代入的轴位置参数都是轴的终点位置值,所以在插补开始前,显式指示9030卡获得插补开始位置(即:告诉9030卡,轴的当前位置是插补开始位置)就是很自然的事情。目前在市场上流行的运动控制卡,绝大部分用相对坐标来进行插补运算,但在实际运用中(典型例子是CNC机床数控系统),绝大部分是用绝对坐标编程的,针对实际应用,9030卡选择用绝对位置编程,且用用户单位编程。这样作有很多优点,它方便了用户编程,省去了很多中间计算环节,非常直观,且没有积累误差。(3)9030卡怎样处理插补加速度及插补速度简单一条直线或圆弧,它们的加减速按直线处理,加速度和减速度可以不一样,如下:速度达到插补设定速度减速阶段加速阶段时间插补速度曲线如果直线或圆弧很短,不够加减速,则插补速度曲线如下:达不到插补设定速度速度减速阶段加速阶段时间插补速度曲线(4)两线段之间如何进行插补速度衔接27\n这里所谓“线段”是指直线或圆弧或Nurbs曲线。9030卡在处理两线段之间速度衔接时,采用矢量夹角的方法进行处理,即根据两线段的矢量夹角来决定衔接处的插补速度。如下图所示:设线段L1与线段L2的插补速度是一样的,均为F,两线段的矢量夹角为A,由函数Y夹角A不降速降速降速为0衔接处速度L1L2X夹角A两矢量的夹角临界夹角A1临界夹角A2LM_SetParaAngle_9030(….)设定了两个临界夹角:A1和A2,则线段L1终点处的速度Fe计算如下:Fe=F;当A≤A1Fe=0;当A≥A2A2-AF=F´当A1≤A≤A2eA2-A1(5)多个小线段连续插补时如何处理插补速度所谓小线段是指它的长度不足以按设定加减速完成加速过程或减速过程,加速过程是指从某一起始速度(比如0速)加速到指定速度,同理减速过程。通常插补引擎在运行到某一线段之前,要对它进行插补预处理,要预知它的起点速度和终点速度,线段首尾相连,本段的终点速度就是下一段的起点速度,所以在插补预处理中主要是计算线段的终点速度。当线段很短时,情况就变得复杂起来,举例如下:Y前端情况未知起点速度为0L2求L1终点速度L1X028\n如上图,假如L1、L2矢量夹角很小,L1是短线段(不足以完成加速过程)。按合理的推断L1、L2衔接处的速度(L1终点速度)应该平滑过渡,假如L2也很短(不足以完成加速过程),L1终点速度到底是多少就很难推算。要推算L1的终点速度,必须满足以下条件:1.L2足够长2.L2+L3+L4+…Ln足够长,如下图:LnL2+L3+L4+…Ln足够长到Ln时完成加速过程起点速度为0L2L1求L1终点速度X3.L2+L3+L4+…Ln不足够长,但Ln的终点速度可知,如下图:由于Ln与L的夹角太Lnn+1Y大,Ln的终点速度为0Ln+1起点速度为0L2L1求L1终点速度X0不难看出,满足以上3种条件,就能计算出L1终点处的速度。9030卡的插补缓冲区有4096行深度,当用户不断将插补数据写入缓冲区时,也就不断的激励9030卡进行插补预处理,由于9030卡采用以上所介绍的插补算法,使9030卡有能力进行多个小线段的连续高速插补。在极端情况下,如果4096行的小线段都不足以完成加减速过程,这时该如何处理呢?在9030卡的插补函数:LM_Start_9030(….)中有强制执行参数:ObligeFlag;当ObligeFlag设为1时,将假定第4096行的(或最末端的)终点速度为0,这样就能计算出各线段的终点速度,使插补引擎能够连续运行。(6)什么时候发出插补开始命令LM_Start_903029\n1.当插补缓冲区空时,用户然后写入插补顺序执行命令,这时发出插补开始命令LM_Start_9030将启动插补引擎。2.当插补引擎执行到LM_End_9030后,需要发出插补开始命令LM_Start_9030再次启动插补引擎。3.当发出LM_LineEnd_9030命令后,插补引擎运行到当前行结束并停止,需要发出插补开始命令LM_Start_9030再次启动插补引擎。4.当插补引擎被轴停止命令(StopAxis_9030、AbortAxis_9030、CeaseAxis_9030)终止后,需要再次启动插补引擎,这时用户需要先清空插补缓冲区空,形成条件1。(7)在插补开始运行时,轴单独的控制命令如何运用在相关轴进行插补运算时,除了轴停止命令(StopAxis_9030、AbortAxis_9030、CeaseAxis_9030),其它命令都不能执行。如果用户写入其它命令(比如StartAxis_9030),系统将报错,用函数GetErrorNo_9030可以检测到错误号。与插补不相关的轴(即:轴没有与插补虚拟轴XYZW进行匹配),可以正常操作。(8)如何实现不同板间的的多轴插补(保留功能)理论上不同板间的轴是不能实现插补的,因为插补运算是由板上的DSP完成的,举例说明,假如用户用到两块9030卡,要实现8个轴的线性插补,这时用户要自行计算两块卡上插补矢量的分量,并分别写入各自板上的插补缓冲区,而后顺序启动两板的插补引擎,这时从微观来看,两块板上的插补引擎启动时间不能同步,最多相差在2毫秒之内(由9030卡的工作原理决定的)。如果这种误差能满足用户要求,也就能实现不同板间的插补。还有一种方法,用函数LM_IOOut_9030(….)、LM_Wait_I_9030(….)实现两板的同步。在两块卡的端子板上连一根线,比如板0的1号输出点连在板1的1号输入点上,在两卡的插补缓冲区中分别写入如下命令:….LM_IOOut_9030(0,1,1,100);//板0的1号输出点为1LM_Line_9030(0,….);//执行线性插补….LM_Wait_I_9030(1,1,100);//等待板1的1号输入点为1时(实际为从板0发出)LM_Line_9030(1,….);//执行线性插补….在上例中,两块板的线性插补同步时间在2.0毫秒之内。(9)如何运用PWM输出与插补速度随动命令30\n在激光加工中,PWM信号一般用来控制激光功率,PWM输出与插补速度随动命令(函数LM_PWM_9030)用于实现这个目标。在程序前端写入LM_PWM_9030命令,往后PWM脉冲输出的占空比将随插补速度按比例线性变化,这些工作完全由板上的DSP完成,用户使用起来将非常方便。(10)插补结束函数(LM_End_9030)起什么作用插补结束函数(LM_End_9030)最主要的作用有两个:1、告诉9030卡,当执行到插补结束函数(LM_End_9030)所在行时,插补速度为0,即停止插补运动。2、告诉9030卡,何时开始新的插补运动,等待新的插补开始命令LM_Start_9030()。如前所述,9030卡对写入插补缓冲区的命令进行插补预处理,对各个插补线段的起点位置速度及终点位置速度进行预先计算,比如:当只执行一条很简单的直线插补命令LM_Line_9030(0,1000,0,0,0,1000,100)时,其后也应该加入插补结束函数(LM_End_9030),这时9030明白只有一条直线插补,该线段终点位置的插补速度为0,如下:……LM_Line_9030(0,1000,0,0,0,1000,100);LM_End_9030(0);LM_Start_9030(0,0);速度最大插补速度插补减速阶段插补加速阶段时间插补速度曲线如果不写插补结束函数(LM_End_9030),例如下:……LM_Line_9030(0,1000,0,0,0,1000,100);LM_Start_9030(0,0);由于不知道该线段终点位置的插补速度到底是多少,9030卡不能完成插补预处理(即不能完成该线段的速度规划),在上例中,在发出插补开始命令后,实际9030卡并不立即执行插补运动,除非插补开始命令代入强制执行参数,如下:LM_Line_9030(0,1000,0,0,0,1000,100);31\nLM_Start_9030(0,1);//第2个参数为1,表示强制执行(9030卡认为//该线段的终点速度为0)。速度不知道终点速度插补加速阶段时间未完成的插补速度曲线需要指出的是,能告知9030卡插补终点速度为0的还有以下几个函数:插补等待命令:shortLM_Wait_9030(….);插补等待输入点命令:shortLM_Wait_I_9030(….);插补输出IO点命令:shortLM_IOOut_9030(….);插补输出PWM命令:shortLM_PWM_9030(….);(11)插补输出IO点函数LM_IOOut_9030与普通输出IO点函数WriteIo_9030的关系在插补正在执行阶段(用函数LM_GetState_9030检测到的状态值为7),函数LM_IOOut_9030的优先级高于普通输出IO点函数WriteIo_9030,但低于按位输出IO点函数WriteIoBit_9030。如,在插补序列中有函数LM_IOOut_9030,它对第1号输出点置为1,当插补运动执行到该行时,1号输出点为1,而这时再用WriteIo_9030函数对IO点置位时,第1号IO点的输出将不受影响,除非插补状态值不为7。而按位输出IO点函数WriteIoBit_9030可随时控制输出点。(12)函数LM_GetState_9030说明函数LM_GetState_9030的原意是获得插补状态,其返回值有以下几种:0:停止状态1:被轴停止命令结束(建议用Abort_9030命令)2:被行结束停止命令停止3:被LM_End_9030结束4:插补缓冲区空5:被进给倍率为0暂停32\n6:被进给暂停挂起7:插补正在进行255:命令不成功其中返回值4有两层意思:1、插补缓冲区空2、等待后续命令9030卡采用如下策略加大插补缓冲区:PC机(上位机)9030主卡驱动C程嵌入式CPU序USB2.0语内部88行插补缓冲区内言部函4096数库总行线插补缓冲即:在上位机的驱动程序中有4096行插补缓冲区(缓冲区1)、在9030卡内部有88行插补缓冲区(缓冲区2)。例如:C语言编程片断如下:shortIpoL_State_9030;shortlen;len=LM_GetBuffLen_9030(0);IpoL_State_9030=LM_GetState_9030(0);if(IpoL_State_9030==4&&len!=4096)//插补缓冲区空但在插补缓冲区中还有命令{//产生的原因是:插补命令滞留在驱动程序中的4096行缓冲区中,而9030卡内部33\n的//88行缓冲区是空的Sleep(2);//暂停2毫秒len=LM_GetBuffLen_9030(0);IpoL_State_9030=LM_GetState_9030(0);//再次检测插补状态if(IpoL_State_9030==4&&len!=4096)//插补缓冲区空但在插补缓冲区中还有命令{LM_Start_9030(0,1);//强制执行}else{……}}当插补缓冲区还滞留有插补命令,而函数LM_GetState_9030返回值为4时(等待后续命令),其原因有两种:1.插补命令滞留在驱动程序中的4096行缓冲区中,而9030卡内部的88行缓冲区是空的。在执行函数LM_GetBuffLen_9030时,该函数本身将根据情况会自动完成插补命令从缓冲区1到缓冲区2的转移。如果实际产生转移,则插补状态值将改变,所以在上例程序片断中,让程序暂停2毫秒,再次检测插补状态。2.就是问题(10)中所阐述的现象,即9030卡未能完成插补预处理,没有完成该线段的插补速度规划。解决方法是加入插补结束函数(LM_End_9030)或用函数LM_Start_9030(0,1)强制运行。§2.5.9其它说明⑴轴停止命令轴停止命令有三种,它们的速度曲线如下:1.StopAxis_9030模式:速度按用户设定减速度进行减速34\n时间2.AbortAxis_9030模式:速度在30毫秒之内减速为0时间3.CeaseAxis_9030模式:速度立即停止时间基于9030卡的工作原理,如果编程如下:….….CeaseAxis_9030(0,0);//0轴立即停止State=ReadAxisState_9030(0,0);//读取0轴状态….….State并不能马上返回-5(轴被CeaseAxis_9030命令停止),一般按如下编程,State就能返回-5值。….….CeaseAxis_9030(0,0);//0轴立即停止Sleep(2);//程序等待2毫秒State=ReadAxisState_9030(0,0);//读取0轴状态35\n….….⑵通用IO点9030卡有8+4个输出点,32个输入点。其中第17至第20输入点有双重目的,它们分别是4个轴的位置采集点,可用函数SetAxisIO_9030来控制它们是否有效。第1至第16输入点可用函数SetAxisIO_9030来设定轴的正限位输入点、0(Home)位输入点、负限位输入点(即轴IO点)。9030还可接入急停开关,用Set_Emergency_Stop_9030函数可以使急停开关有效并与第1至第8某一输入点对应。⑶PWM/DA输出与编码器输入9030卡用同一个输出信号来实现PWM或DA输出,当用户选择DA输出时,在信号前端还是PWM信号,它的频率是固定的25K,9030卡通过改变占空比来改变电压。在实际应用中,PWM输出可控制激光电源,DA输出可控制主轴转速。编码器输出可接一个手摇轮。⑷轴位置计数器溢出9030卡的轴位置计数器在主卡上的FPGA中,是一个32位可逆计数器,它真实地记录每个轴发出的脉冲个数,其有效值范围为:-2147483648至2147483647。当轴沿一个方向长时间运动时,轴位置计数器有可能溢出。每转10000线的伺服电机,按3000转/分钟旋转,当运行大概不到72分钟时,位置计数器就溢出了。9030卡中,如果轴位置计数器溢出,当轴以位置模式或插补模式运行时,9030卡会以立即停止模式(CeaseAxis_9030模式)让轴停止运行,同时报警(用GetErrorNo_9030函数可检测到);如果是速度模式(用StartAxisVel_9030命令启动轴运动),则9030卡只会报警,不会将轴停止。溢出时的轴位置计数器将从最大正值转到最小负值,或从最小负值转到最大正值。§2.5.10库函数一览表表2.5库函数一览表(C语言方式)编函数名描述号初始化函数1InitCard_9030初始化9030卡23ExitCard_9030退出9030卡,并释放所占资源轴常规设定函数98SetAxisWorkMode_9030设置轴工作模式15SetAxisIO_9030设置轴IO是否有效17SetAxisOutMode_9030设置轴的输出模式36\n104SetAxisPEL_901设置轴位置闭环跟随误差极限123SetEncoderX4X1_9030设置轴位置反馈编码器和附加编码器的内部倍频数轴状态读取函数ReadAxisTheoryPos_9030读取轴的当前理论位置10ReadAxisEncodePos_9030读取轴的编码器位置2ReadAxisPost_9030返回轴当前实际位置ReadAxisTECV_9030读取轴螺距误差补偿数据26ReadAxisVel_9030返回轴的当前速度27ReadAxisState_9030读取轴的状态1021IsPosCatch_9030读取轴位置捕获标志位124ResetPosCatch_9030轴位置捕获标志位复位1022ReadCatchPos_9030读取轴的捕获位置轴螺距误差补偿设置函数73SetAxisTEC_9030设置轴螺距反向间隙补偿单轴运动控制函数4SetAxisPos_9030设置轴的位置5SetAxisVel_9030设置轴的速度88SetAxisStartVel_9030设置轴的起跳速度95SetAxisStopVel_9030设置轴的停止速度6SetAxisAcc_9030设置轴的加速度96SetAxisDec_9030设置轴的减速度7StartAxis_9030轴开始运行,位置模式8StartAxisVel_9030设置轴速度模式,并按所设速度开始运行9StopAxis_9030轴停止,按所设加速度减速停止19AbortAxis_9030轴停止,在30毫秒之内减速停止20CeaseAxis_9030轴停止,立即停止,无减速过程24GoHome_9030轴回Home点SetAxisSAcc_9030设置轴S型加速度(保留函数)3Home_9030轴位置清零11HomeFB_9030轴位置编码器清零114LookZIndex_9030轴找一转脉冲(轴回Home点)37\n24SetAxisOffset_9030设置轴位置偏移值109SetAxiFBOffset_9030设轴位置编码器偏移值电子齿轮与位置跟随75StartAxisEGear_9030设置轴电子齿轮运动121SetActiveEncoder_9030在轴跟随编码器运动之前,设主动编码器号74SetAxisFE_9030设置轴跟随编码器运动76CancelAxisFEG_9030取消轴跟随运动80GetEnAuto0Flag_9030获得主动编码器自动清零标志79ResetEn0Flag_9030主动编码器自动清零标志置0轴其它控制函数110SetAxisMotorOnOff_9030设轴电机On或Off,使能附加编码器控制函数10ReadEncoderPos_9030读取编码器位置11HomeEncode_9030复位编码器,编码器位置清零113SetEncodeCount_9030设附加编码器位置计数器初值PWM脉冲/DA输出控制12PwmOut_9030PWM脉冲输出PwmOut2_903013PwmStop_9030PWM脉冲停止输出68DAOut_9030DA(数模转换)模拟量输出通用IO读写函数29Set_Emergency_Stop_9030设置IO急停信号14ReadIO_9030读取通用输入点I1-I20状态ReadIOBit_9030按位读取通用输入点I1-I20状态16WriteIo_9030设置通用输出点O1-O8状态81WriteIoBit_9030按位设置通用输出点O1-O8状态82ReadOs_9030读取输出点O1-O8状态83ReadOsBit_9030按位读取输出点O1-O8状态118ReadMPGIO_9030读取手轮IO插补函数38\n插补初始化函数30LM_INIT_IPOL_ENGINE初始化插补引擎31LM_EXIT_IPOL_ENGINE退出插补引擎32LM_SetXAxis_9030将实际轴与插补引擎的X轴相匹配LM_SetYAxis_9030LM_SetZAxis_9030LM_SetWAxis_903033LM_OffXAxis_9030撤消插补引擎的X轴匹配LM_OffYAxis_9030LM_OffZAxis_9030LM_OffWAxis_903054LM_GetXStartPos_9030获得插补轴当前位置,也是轴插补的开始位置,LM_GetYStartPos_9030在发送插补命令LM_GetZStartPos_9030(LM_Line_9030,IpolArc_9030)开始前调用LM_GetWStartPos_9030插补顺序执行函数42LM_Line_9030直线插补该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有16行LM_LineMaxV_903065LM_LineMeasure_9030直线插补并测量输入点66LM_GetMeasureState_9030获得插补测量状态77LM_LineFE_9030直线插补跟随编码器位置43LM_ArcCW_9030圆弧插补,顺圆该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有16行LM_ArcCW_YZ_9030LM_ArcCW_ZX_903044LM_ArcCCW_9030圆弧插补,逆圆该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有10行LM_ArcCCW_YZ_9030LM_ArcCCW_ZX_903060LM_Wait_9030插补等待61LM_PWM_9030插补模式的PWM输出,占空比随速度变化62LM_IOOut_9030插补模式的IO点输出39\n63LM_Wait_I_9030插补等待通用IO点输入45LM_End_9030插补结束该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有10行当插补引擎运行到该行时将停止运行,如要重新开始,则再送入插补数据命令(LM_Line_9030,LM_ArcCW_9030,LM_ArcCCW_9030),并发LM_Start_9030命令插补控制函数40LM_SetACCDec_9030设置插补加速度和减速度71LM_SetSAccPower_9030设置插补S型加速度(1,2,3,4)指数(保留函数)41LM_Start_9030插补开始46LM_CleanBuff_9030清除插补缓存55LM_GetBuffLen_9030获得插补缓存剩余长度47LM_SetMinVel_9030设插补最小速度57LM_SetMaxVel_9030设插补最大速度48LM_SetParaAngle_9030设插补参数,角度49LM_GetLineNO_9030获得插补当前行号1002LM_GetFactVel_9030获得实际插补速度LM_SetPauseTime_9030设置插补暂停停止时间50LM_Pause_9030插补暂停51LM_Resume_9030恢复插补暂停52LM_SetSpeedRate_9030设插补速率53LM_LineEnd_9030插补运行完当前行停止56LM_GetState_9030获得插补状态58LM_SetSpeedPri_9030设插补速度优先还是精度优先59LM_SetSysPara_9030设插补系统参数87LM_SetAxisMaxErrLtd_9030设轴最大插补位置误差限制78LM_GetFEnState_9030获得轴编码器跟随已达到目标状态Nurbs曲线插补函数1000LM_SetNurbsScanMode_9030设置Nurbs曲线插补预处理的扫描模式1001LM_SetNurbsVelCtrl_9030设置Nurbs曲线插补时的速度控制93LM_SetNurbsAccDec_9030设置Nurbs曲线插补加速度和减速度40\n97LM_SetNurbsCompCoef_9030设Nurbs曲线插补误差补偿系数90LM_NurbsInit_9030初始化Nurbs曲线,为Nurbs曲线插补做准备91LM_NurbsData_9030设Nurbs曲线插补数据92LM_Nurbs_9030Nurbs曲线插补LM_Nurbs4Axis_90304轴Nurbs曲线插补1013LM_SendNurbsData_9030向9030卡传输NURBS曲线数据1012LM_GetNubrsExecPara_9030读取9030卡NURBS曲线插补运行参数值LM_GetNurbsInBuffLen_9030获得Nurbs曲线滞留在插补缓冲区的数1010LM_GetNurbsErrorNo_9030获得产生Nurbs曲线(插补)的错误号Nurbs曲线计算函数1004Set_NurbsInit_9030初始化Nurbs曲线,为Nurbs曲线计算做准备1005Set_NurbsData_9030设Nurbs曲线计算数据1006Set_NurbsEnd_9030设Nurbs曲线数据结束1007Get_NurbsPos_9030计算Nurbs曲线轴位置(型值点)坐标1008Get_NurbsPosVB_9030计算Nurbs曲线轴位置(型值点)坐标(VB风格)1009Get_NurbsLen_9030计算Nurbs曲线长度1011Get_NurbsErrorNo_9030获得产生Nurbs曲线(计算)的错误号94LM_SetForceCtrl_9030设置插补力控制模式读取9030卡有关版本信息28ReadFirmwareVersion_9030读取9030控制卡固件版本号67ReadDllVersion_9030读取9030控制卡动态链接库版本号70GetDriverVersion_9030读取9030卡的驱动版本号GetErrorNo_9030获得错误号§2.6NURBS曲线由于Nurbs曲线的特殊性,在本节将单独对它进行讲解。41\n§2.6.1NURBS曲线概论NURBS曲线是非均匀有理B样条曲线(NonUniformRationalB-spline)的英文缩写,其数学定义为:nåNi,m(K)RiPii=0P(K)=,P(K)为曲线上的位置向量,N(K)为m次样条基函数ni,måNi,m(K)Rii=0基函数由递推公式定义:ì1(Ki£K£Ki+1)Ni,0(K)=í()î0其它(K-K)N(K)(K-K)N(K)()ii,m-1i+m+1i+1,m-1NK=+,m³1i,mK-KK-Ki+mii+m+1i+1式中:P为控制点;R为权因子;K为节点矢量iiNURBS曲线有诸多优点,比如:局部修改性、多阶导数连续性、投影变换不变性等,作为表示自由曲线的一种方法,NURBS曲线已经得到了广泛的使用,在目前流行的CAD/CAM系统中,曲线、曲面的实体造型绝大部分都是用NURBS曲线、曲面表示,而在生成加工轨迹时,由于当前大部分CNC系统(计算机数控系统)不支持NURBS曲线加工,所以只好用短直线来近似。这种近似带来了精度、加工效率损失,和短直线插补相比,NURBS曲线插补加工,加工表面非常接近设计要求的轮廓曲面,且加工代码可在一组程序段中指定,可大大减少程序的大小。由于3次NURBS曲线2阶导数的连续性,其加工速度和加工精度都是短直线不能比拟的。9030卡有以下有关NURBS曲线函数:设置Nurbs曲线插补预处理的扫描模式:shortLM_SetNurbsScanMode_9030(….);设置Nurbs曲线插补时的速度控制:shortLM_SetNurbsVelCtrl_9030(….);设置Nurbs曲线插补加速度和减速度:shortLM_SetNurbsAccDec_9030(….);设Nurbs曲线插补误差补偿系数:shortLM_SetNurbsCompCoef_9030(….);读取NURBS曲线插补运行参数值:floatLM_GetNubrsExecPara_9030(….);获得在插补缓冲区中有几条Nurbs曲线:42\nshortLM_GetNurbsInBuffLen_9030(….);获得产生Nurbs曲线插补错误的编号:shortLM_GetNurbsErrorNo_9030(….);向9030卡转输NURBS曲线数据:shortLM_SendNurbsData_9030(….);NURBS曲线插补命令:初始化Nurbs曲线:shortLM_NurbsInit_9030(….);设Nurbs曲线插补数据:shortLM_NurbsData_9030(….);Nurbs曲线插补命令(3轴):shortLM_Nurbs_9030(….);Nurbs曲线插补命令(4轴):shortLM_Nurbs4Axis_9030(….);有关NURBS曲线计算的函数:初始化Nurbs曲线,为Nurbs曲线计算做准备:shortSet_NurbsInit_9030(….);设Nurbs曲线计算数据:shortSet_NurbsData_9030(….);设Nurbs曲线数据结束:shortSet_NurbsEnd_9030(….);计算Nurbs曲线轴位置(型值点)坐标:shortGet_NurbsPos_9030(….);计算Nurbs曲线长度:doubleGet_NurbsLen_9030(….);获得产生Nurbs曲线计算错误的编号:shortGet_NurbsErrorNo_9030(….);§2.6.2NURBS曲线插补工作流程针对NURBS曲线,9030卡工作过程如下:用户设定NURBS曲线数据:通过如下函数:LM_NurbsInit_9030(….);LM_NurbsData_9030(….);…..若干行LM_NurbsData_9030(….);LM_Nurbs_9030(….);在9030卡的动态连接库中,对NURBS曲线数据进行插补预处理,得出一组中间数据。(用户在写入LM_Nurbs_9030(….)函数时,插补预处理开始执行。)43\n插补预处理的中间数据分两部分,一部分在插补缓冲区中排队,另一部分在数据缓冲区排队,等待传入9030卡中。。(用户在写入插补顺序执行函数及调用LM_GetBuffLen_9030(….)函数时,9030动态连接库会自动安排两缓冲区有关数据,将其及时传入9030卡中。)9030卡实时进行插补运算,执行插补命令。§2.6.3精度与速度控制为了控制NURBS曲线的插补精度及运行平稳性,引入以下概念:弦高误差:在NURBS曲线插补中,每个插补周期都是一个直线代替曲线弧的处理过程,同时引入弦高误差d,如图所示。uidiui+1弦高误差d原理图弦高误差d的大小与进给速度DV、曲率半径r有关。如果以圆弧段近似代替曲线弧,则可得NURBS曲线插补的弦高误差关系式:44\n4d(2r-d)8rdiiiiDV=»iTT其中:T为插补运算周期,通常情况下,r〉〉d。从上式可以看出弦高误差d与进给速度DV、曲率半径r密切相关。i为了将整个NURBS曲线插补轨迹的弦高误差限制在指定的允许误差范围之内,给定许用最大弦高误差d。max法向加速度:在对NURBS曲线进行插补处理时,不但要考虑沿NURBS曲线轨迹切线方向的加速度,还要考虑轨迹法向加速度。法向加速度的计算公式为:2va=其中:v切向速度,r为曲率半径。r由上式可以看出,在进给速度较大、轨迹曲率半径较小的情况下,法向加速度会很大,由物理学公式F=ma可知,法向加速度过大,机床所受力F(沿NURBS曲线的法向)可能会超出机床允许的范围之内,因此有必要对NURBS曲线的法向加速度进行限制。Nurbs曲线插补预先扫描:从上述可知,“弦高误差”和“法向加速度”与加工速度、曲率半径密切相关,为了控制“弦高误差”和“法向加速度”,在插补前,9030卡会对NURBS曲线进行插补预处理,其过程是按一定速度对整条NURBS曲线进行逐点计算(对Nurbs曲线全长进行扫描),找出曲率半径的极低点位置,及相关的减速点及加速点位置(如下图A、B、C点),在实际NURBS曲线插补时,系统将在到达曲率半径极低点(A点)前的B点时减速,在离开A点后,从C点起速度随曲率半径增大而加速,直至加速到正常加工速度。45\nBCA基于以上原因,函数LM_SetNurbsScanMode_9030(….)、LM_SetNurbsVelCtrl_9030(….)将完成以上参数(弦高误差、法向加速度、预扫描速度)设定。由于Nurbs曲线插补的特殊性,函数LM_SetNurbsAccDec_9030(….)将单独给Nurbs曲线插补设插补加速度和插补减速度。§2.6.4编程说明由NURBS曲线的定义和性质可知:当节点矢量数为(m+1),幂次为p,控制顶点数为(n+1)时,m,p和n三者之间的关系为m=n+p+1。组成一个最简单的3次NURBS曲线必须至少有4个控制点,所以,3次NURBS曲线另外还有多出的4个节点数据,所以在组成一条完整的NURBS曲线,必须按如下方式书写:LM_NurbsInit_9030(….);LM_NurbsData_9030(….);…..若干行,最少4行LM_NurbsData_9030(….);LM_Nurbs_9030(….);……………本函数将代入另4个节点数据如果产生异常情况,可调用函数Get_NurbsErrorNo_9030(….)获得产生错误的原因。§2.6.5NURBS曲线的计算为了编程方便,9030卡给出了有关NURBS曲线坐标位置计算和曲线长度计算的函数。46\n这些函数可单独使用,与插补无关。设NURBS曲线数据:初始化Nurbs曲线,为Nurbs曲线计算做准备:shortSet_NurbsInit_9030(….);设Nurbs曲线计算数据:shortSet_NurbsData_9030(….);设Nurbs曲线数据结束:shortSet_NurbsEnd_9030(….);计算Nurbs曲线轴位置(型值点)坐标:shortGet_NurbsPos_9030(….);计算Nurbs曲线长度:doubleGet_NurbsLen_9030(….);在函数Get_NurbsPos_9030(….)、Get_NurbsLen_9030(….)中,都有参数变量Up,Up值的范围是:0-(控制点数-3),比如,Nurbs曲线由4个控制点组成,则:Up:0–1.0Nurbs曲线由7个控制点组成,则:Up:0–4.0在9030卡中,Nurbs曲线在内部以矩阵方式表示(详细说明请看本书附录A的有关内容),Up就是矩阵行列式中的变量系数。47\n第三章库函数详解§3.1初始化函数§3.1.1InitCard_9030初始化控制卡函数编号:1函数原型:C:shortAPIENTRYInitCard_9030(unsignedshortBoard_NO,shortAxis0Mode,shortAxis1Mode,shortAxis2Mode,shortAxis3Mode,shortPWM_DA_Mode);解释:在调用函数库的各个函数之前,第一步首先必须对函数库进行初始化。这个函数初始化电机控制卡,用户应在程序的初始化部分调用该函数,对每个板进行初始化。它将做以下工作:①初始化板上芯片②轴位置寄存器清零③所有轴输出信号将根据参数(Axis0Mode、Axis1Mode、Axis2Mode、Axis3Mode)值设置为特定模式,见下。④所有IO输出信号都设置为低电平(重新上电时)。如果不是重新上电,9030卡将保持原来状态。轴正在运行时是否可调用:否参数:board_NO:板号,可能值0、1、2、3;一台计算机中最多可以运行4块控制卡。Axis0Mode,Axis1Mode,Axis2Mode,Axis3Mode:0-2:初始化对应轴输出模式:0=轴无效;1=开环脉冲模式;2=位置闭环脉冲输出模式;48\nPWM_DA_Mode:0-10=PWM输出1=DA输出返回码:0或-1,-1=不成功,0=成功参考函数:Exit9030Card§3.1.2ExitCard_9030释放控制卡驱动库函数函数原型:函数编号:23C:shortAPIENTRYExitCard_9030(unsignedshortBoard_NO);解释:释放驱动函数库,这个函数释放9030函数库所占用资源。在用户程序退出之前应调用该函数一次。轴正在运行时是否可调用:否参数:board_NO:板号,可能值0、1、2、3;返回码:(0)成功(-1)不成功参考函数:InitCard_9030§3.2轴常规设定函数49\n§3.2.2SetAxisWorkMode_9030设置轴工作模式函数编号:98函数原型:C:shortAPIENTRYSetAxisWorkMode_9030(unsignedshortBoard_NO,unsignedshortAxis_No,unsignedshortWorkMode);解释:设置轴工作模式在插补引擎正在运行当中是否可调用:否参数:Board_NO:0-3,板号Axis_No:0-3,轴号WorkMode:设置轴工作模式:0=轴无效;1=开环脉冲模式;2=位置闭环脉冲输出模式;返回码:0或-1,-1=不成功,0=成功§3.2.3SetAxisIO_9030设置轴IO是否有效函数编号:15函数原型:C:shortAPIENTRYSetAxisIO_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortPHN_flag,shortMode,shortH_L_Act,shortIO_index);50\n解释:设置轴IO是否有效。每个轴可以设5个特定点,它们是:正限位、Home点、负限位、位置捕捉触发信号输入点、轴电机故障信号输入点9030卡初始化时轴IO无效。轴正在运行时是否可调用:否参数:Board_NO:0-3,板号Axis_No:0-3,轴号PHN_flag:1-5:正限位、Home点、负限位、位置捕捉触发信号、轴电机故障信号:1=正限位;2=Home点;3=负限位;4=位置捕捉触发信号;5=轴电机故障信号;Mode:0、1、2或3,0=该点无效;3=自由挂接模式;1、2=对正负限位复用固定点中断模式;(保留功能)1、2=对Home点固定点模式;(保留功能)H_L_Act:0或1,0=该点低电平有效,1=该点高电平有效IO_index:1-16,在Mode=3时(自由挂接模式);该点挂接到通用输入点的那一点位置捕捉触发信号的进一步解释:当PHN_flag=4(位置捕捉触发信号)时,Mode值只能为:0(无效)1(有效,连续捕捉)2(有效,等待位置捕捉标志位复位后再继续捕捉)且每个轴的位置捕捉信号输入点位置固定:0轴对应I17点;1轴对应I18点;2轴对应I19点;3轴对应I20点;H_L_Act:0=下降沿触发捕捉;1=上升沿触发捕捉设捕捉点时,编程顺序很重要,应该在设轴工作模式函数SetAxisWorkMode_9030之后再设捕捉点。切记51\n轴电机故障信号的进一步解释:当PHN_flag=5(轴电机故障信号)是,Mode值只能为0(无效)或1(有效),且每个轴的轴电机故障信号输入点位置固定:0轴I21点;1轴I22点;2轴I23点;3轴I24点;当系统检测到轴电机故障信号输入点有效时,轴将以CeaseAxis_9030方式立即停止。返回码:(0)成功(-1)不成功参考函数:§3.2.4SetAxisOutMode_9030设置轴的输出模式函数编号:17函数原型:C:shortAPIENTRYSetAxisOutMode_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortMode_A,shortMode_B,shortMode_C);解释:这个函数用来设置轴脉冲的输出模式及轴方向,当轴的工作模式是:1=开环脉冲模式;2=位置闭环脉冲输出模式;时,在9030板卡支持“脉冲/方向”和“正向脉冲/反向脉冲”两种输出模式。轴正在运行时是否可调用:否参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3Mode_A0或1,0=共阳极输出,1=共阴极输出;52\n(保留功能,设1,因为是轴位置信号是差分输出)Mode_B0或1,0=脉冲-方向模式输出,1=脉冲-脉冲模式输出Mode_C0或1,0=轴方向正常,1=轴方向反转返回码:(0)成功(-1)非法操作§3.2.5SetEncoderX4X1_9030设编码器倍频数(固件5.2以上版)函数编号:104函数原型:C:shortAPIENTRYSetEncoderX4X1_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortX4X1);解释:该函数设置轴位置反馈编码器和附加编码器的内部倍频数,9030卡初始化后缺省状态下为4倍频,特殊情况下可设1倍频。对于闭环轴(工作模式为2),初始化9030卡后,应首先设编码器倍频数(如果需要设1倍频),注意时机。轴正在运行时是否可调用:否参数:Board_NO:0-3,板号Axis_No:0-4,0-3轴号;4=附加编码器X4X1:0、1;0=4倍频;1=1倍频。返回码:0或-1,-1=不成功,0=成功53\n§3.4轴状态读取函数§3.4.1ReadAxisTheoryPos_9030读取轴的当前理论位置函数编号:2函数原型:C:longAPIENTRYReadAxisTheoryPos_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:返回轴的当前实际理论位置。例如:轴从零位正向旋转了100个步距角,又负向旋转了40个步距角,则调用ReadAxisTheoryPos_9030函数将返回60(轴的当前位置)。注意:在9030卡内部,每个轴有2个位置计数器:1轴理论位置计数器;(在9030内部对轴所发脉冲数进行计数)2轴编码器反馈位置计数器。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:轴的位置;范围,长整型数;单位,脉冲个数。当返回轴位置=-2147483648时,表示不成功,有错误产生。参考函数:ReadAxisVel_903054\n§3.4.2ReadAxisEncodePos_9030读取轴的编码器位置函数编号:2函数原型:C:longAPIENTRYReadAxisEncodePos_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:返回轴的当前编码器实际位置。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:轴的位置;范围,长整型数;单位,脉冲个数。当返回轴位置=-2147483648时,表示不成功,有错误产生。参考函数:ReadAxisVel_9030§3.4.3ReadAxisPos_9030返回轴当前位置函数编号:2函数原型:C:longAPIENTRYReadAxisPos_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:返回轴的当前位置。根据轴的工作模式,该函数返回值不一样,总结如下:55\n0=轴无效;返回0值1=开环脉冲模式;返回轴理论位置2=位置闭环脉冲输出模式;返回轴编码器反馈位置值轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:轴的位置;范围,长整型数;单位,脉冲个数。当返回轴位置=-2147483648时,表示不成功,有错误产生。参考函数:ReadAxisVel_9030§3.4.4ReadAxisTECV_9030读取轴螺距误差补偿数据函数编号:2函数原型:C:longAPIENTRYReadAxisTECV_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:如果轴设了螺距误差补偿功能,该函数返回轴的当前轴螺距误差补偿实际值。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:56\n轴的位置;范围,长整型数;单位,脉冲个数。参考函数:§3.4.5ReadAxisVel_9030返回轴的当前速度函数编号:26函数原型:C:longAPIENTRYReadAxisVel_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:返回轴的当前实际速度。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:轴的当前速度;范围,长整型数;单位,Hz,轴的脉冲频率。当返回轴位置=-2147483648时,表示不成功,有错误产生。参考函数:ReadAxisPos_9030§3.4.6ReadAxisState_9030读取轴的状态57\n函数编号:27函数原型:C:shortAPIENTRYReadAxisState_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:这个函数将返回轴的状态。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:1:轴在运动中0:轴在停止状态,轴位置到达,或被清零(Home_9030命令)-1:轴GoHomeOK-2:轴在GoHome中暂时停止-3:轴被StopAxis_9030命令停止-4:轴被AbortAxis_9030命令停止-5:轴被CeaseAxis_9030命令停止-6:轴被插补命令停止-7:轴被正限位停止-8:轴被负限位停止-9:轴位置寄存器溢出被停止-10:轴被外部IO急停停止-11:轴在跟随模式下速度为0-12:轴编码器位置寄存器溢出-13:轴跟随误差超限-14:轴电机故障255:读错误注意:当轴有位置捕捉时(轴位置捕获标志位=1函数IsPosCatch_9030获得),函数ReadAxisState_9030只返回2种状态:1:轴在运动中0:轴在停止状态58\n§3.4.7IsPosCatch_9030读取轴位置捕获标志位(固件5.2以上版)函数编号:1021函数原型:C:shortAPIENTRYIsPosCatch_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:这个函数将返回轴是否有位置捕捉。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:1,0或-1,1=有轴位置捕获,0=没有轴位置捕获-1=不成功,0=成功§3.4.8ReadCatchPos_9030读取轴的捕获位置函数编号:2函数原型:C:longAPIENTRYReadCatchPos_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortResetFlag);解释:返回轴的捕捉位置。根据轴的工作模式不同,捕捉位置将临时占据轴不同的位置寄存器(参看§2.5.6位置捕捉函数节),总结如下:0=轴无效;返回0值1=开环脉冲模式;返回轴编码器反馈位置寄存器值2=位置闭环脉冲输出模式;返回轴理论位置寄存器值59\n轴正在运行时是否可调用:是参数:Board_NO:卡号,可能值0,1,2,3Axis_No:轴号,可能值0,1,2,3ResetFlag:0,10=轴位置捕获标志位保持;1=轴位置捕获标志位复位注意:轴位置捕获标志位复位后,将解除捕捉位置临时占据的轴位置寄存器,这种解除不是立即有效,由于9030卡的工作原理(参看§2.49030卡工作原理节),要延时3毫秒。返回码:轴的捕捉位置;范围,长整型数;单位,脉冲个数。当返回轴位置=-2147483648时,表示不成功,有错误产生。参考函数:ReadAxisTheoryPos_9030ReadAxisEncodePos_9030§3.4.9ResetPosCatch_9030轴位置捕获标志位复位(固件5.2以上版)函数编号:124函数原型:C:longAPIENTRYResetPosCatch_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:轴位置捕获标志位复位。注意:轴位置捕获标志位复位后,将解除捕捉位置临时占据的轴位置寄存器,这种解除不是立即有效,由于9030卡的工作原理(参看§2.49030卡工作原理节),要延时3毫秒。轴正在运行时是否可调用:是60\n参数:Board_NO:卡号,可能值0,1,2,3Axis_No:轴号,可能值0,1,2,3返回码:0或-1,-1=不成功,0=成功参考函数:IsPosCatch_9030§3.5轴螺距误差补偿设置函数批注[yu3]:保留§3.5.1SetAxisTEC_9030设置轴螺距反向间隙补偿函数编号:73函数原型:C:shortAPIENTRYSetAxisTEC_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longErrorV,shortTimeNum);解释:该函数将设轴单纯的螺距反向间隙补偿值。一般原则是当轴回零点完成后(Home_9030或GoHome_9030命令之后),调用该函数来设轴的反向间隙补偿值。在调用该函数那一刻,9030卡自动判断轴方向,当轴运动方向与该时刻方向相反时,9030卡将开始进行螺距反向间隙补偿。注意:Home_9030命令或GoHome_9030命令自动取消轴螺距反向间隙补偿。轴正在运行时是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3Axis_No:轴号,可能值0,1,2,3ErrorV:轴螺距反向间隙补偿值;范围:0-32767;单位:脉冲个数。TimeNum:补偿所用时间;范围:1-20;单位:毫秒。一般原则是反向间隙补偿值越大,所用时间应该越长。61\n返回码:0或-1,-1=不成功,0=成功参考函数:§3.5.2SetAxisTECData_9030设置轴螺距误差补偿数据函数编号:111(固件版本V5.9以上)函数原型:C:shortAPIENTRYSetAxisTECData_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortMode,shortEffectNum,longBasePoint,longNodeLen,shortDirec,shortReverseGap,short*TEData);解释:该函数将设轴螺距误差补偿模式和数据值。该函数要比SetAxisTEC_9030函数高级和复杂,一般原则是:简单非精密应用场合,可用SetAxisTEC_9030函数进行单纯的螺距反向间隙补偿。精密应用场合,可用该函数进行轴螺距误差补偿。当Mode=2(反向间隙补偿+单向螺距误差补偿)时,调用该函数后,先将螺距补偿数据发送到9030卡中,当轴回零点完成后(Home_9030或GoHome_9030命令之后),调用SetAxisTECWork_9030函数启动轴的螺距误差补偿,再调用SetAxisTEC_9030函数来设轴的反向间隙补偿值。当Mode=3(双向螺距误差补偿)时,SetAxisTEC_9030函数自然失效。9030卡具体支持的补偿类型可分为三类:①单纯反向间隙补偿(用SetAxisTEC_9030函数实现)②反向间隙补偿+单向螺距误差补偿此种补偿类型中:有1组螺补数据,该组螺补数据数最大为511个。补偿方向:补偿方向选择1时,表示该轴正向移动时进行螺距误差补偿,该轴负向移动时,在螺距误差补偿数据的基础上再加上反向间隙补偿数据,进行螺距误差补偿。补偿方向选择-1时,表示该轴负向移动时进行螺距误差补偿,该轴正向移动时,在螺距误差补偿数据的基础上再加上反向间隙补偿数据,进行螺距误差补偿。62\n基准位置:在测量滚珠丝杠螺距误差时的基准位置,可设丝杠上的任一点设为基点位置。有效数据数:指一组螺补数据所包含的数据成员个数。数据间隔:测量一组螺补数据时,每个数据的间隔距离。数据间隔(假设10mm)负向:反向间隙补偿+螺距误差补偿(螺补数据与机床正向移动时相同)0102030405060708090100基准位置螺补数据:023-1-211231-1正向:螺距误差补偿③双向螺距误差补偿此种补偿类型中:有2组螺补数据,每组螺补数据最大为255个补偿方向:补偿方向选择1时,表示在机床正向移动时以第一组数据做螺距误差补偿,负向移动时以第二组数据做螺距误差补偿;补偿方向为-1时,表示在机床负向移动时以第一组数据做螺距误差补偿,正向移动时以第二组数据做螺距误差补偿。SetAxisTEC_9030函数自然失效。数据间隔(假设10mm)负向以第二组螺补数据做螺距误差补偿0102030405060708090100基准位置正向以第一组螺补数据做螺距误差补偿轴正在运行时是否可调用:否63\n参数:Board_NO:0-3,板号Axis_No:0-3,轴号Mode:2或32=反向间隙+螺距误差补偿;3=双向螺距误差补偿EffectNum:Mode=2时,1-512;Mode=3时,0-256;有效数据数BasePoint:基点位置,数组TEData[0]对应的位置,单位:脉冲个数。NodeLen:数据间距离,单位:脉冲个数。Direc:1或-1;方向:Mode=2时,无意义(反向间隙补偿方向保留);Mode=3时,前(双向)一组数据方向ReverseGap:反向间隙补偿数据,范围:0-32767;单位:脉冲个数。TEData:螺距误差补偿数据数组,数组个数固定为512个,每个数据范围:-32768-+32767;单位:脉冲个数。如果补偿模式是3=双向螺距误差补偿时,第1组数据占据0-255数组;第2组数据占据256-511数组;返回码:0或-1,-1=不成功,0=成功参考函数:§3.5.3SetAxisTECWork_9030启动/停止轴螺距误差补偿函数编号:111(固件版本V5.9以上)函数原型:C:shortAPIENTRYSetAxisTECWork_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortWork);解释:当用函数SetAxisTECData_9030向9030卡中传入螺补数据数据后,用该函数启动/停止64\n螺距误差补偿。一般原则是当轴回零点完成后(GoHome_9030命令之后),调用该函数来启动轴螺距误差补偿功能。轴正在运行时是否可调用:否参数:Board_NO:0-3,板号Axis_No:0-3,轴号Work:0或10=停止螺距误差补偿;1=启动螺距误差补偿返回码:0或-1、-2:-1=不成功,-2=轴螺距误差补偿数据失效,0=成功参考函数:§3.6单轴运动控制函数§3.6.1SetAxisPos_9030设置梯形包络线的终点位置函数编号:4函数原型:C:shortAPIENTRYSetAxisPos_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longposition);解释:设置轴的终点位置参数,在调用该函数后,用户再调用startAxis_9030函数,轴终点位置的新参数才有起作用。轴正在运行时是否可调用:是参数:65\nBoard_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3position轴的位置;范围:长整型数;单位:脉冲个数。返回码:(0)成功(-1)非法参数参考函数:SetAxisVel_9030SetAxisAcc_9030StartAxis_9030§3.6.2SetAxisVel_9030设置梯形包络线的最大速度函数编号:5函数原型:C:shortAPIENTRYSetAxisVel_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longvelocity);解释:设置轴的最大速度,在调用该函数后,用户再调用StartAxis_9030函数,新参数才起作用。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3Velocity轴的速度,范围:长整型数;单位:Hz,轴的脉冲频率返回码:(0)成功(-1)非法参数参考函数:SetAxisPos_903066\nSetAxisAcc_9030StartAxis_9030§3.6.3SetAxisStartVel_9030设置轴的起跳速度函数编号:88函数原型:C:shortAPIENTRYSetAxisStartVel_9030(unsignedshortBoard_NO,shortAxis_No,longvelocity);解释:设置轴的起跳速度。在9030初始化时,每个轴的系统缺省起跳速度为0,轴的起跳速度只对本轴单独运行函数有影响,对插补函数没有影响。速度最大速度减速阶段加速阶段起跳速度时间轴速度曲线轴正在运行时是否可调用:否参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3velocity:轴的起跳速度,可正负,单位:脉冲数/秒(Hz)。返回码:(0)成功;(-1)不成功参考函数:67\n§3.6.4SetAxisStopVel_9030设轴的停止速度函数编号:95函数原型:C:shortAPIENTRYSetAxisStopVel_9030(unsignedshortBoard_NO,shortAxis_No,longvelocity);解释:设置轴的停止速度。在9030初始化时,每个轴的系统缺省停止速度为16,轴的停止速度只对本轴单独运行函数有影响,对插补函数没有影响。速度最大速度减速阶段加速阶段停止速度起跳速度时间轴速度曲线轴正在运行时是否可调用:否参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3velocity:轴的停止速度;范围:正长整型数;单位:Hz,轴的脉冲频率。缺省值:16返回码:(0)成功;(-1)不成功参考函数:§3.6.5SetAxisDec_9030设轴的减速度,固件3.0版函数编号:9668\n函数原型:C:shortAPIENTRYSetAxisDec_9030(unsignedshortBoard_NO,shortAxis_No,longdeceleration);解释:设置轴的减速度值。在9030初始化时,每个轴的系统缺省起跳速度为1000,轴的减速度值只对本轴单独运行函数有影响,对插补函数没有影响。速度最大速度减速阶段,斜率为减速度加速阶段起跳速度时间轴速度曲线轴正在运行时是否可调用:否参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3deceleration:轴的减速度;范围:长整型数,必须是正值;单位:脉冲数/秒平方。返回码:(0)成功;(-1)不成功参考函数:§3.6.6SetAxisAcc_9030设置梯形包络线的加速度,绝对值函数编号:6函数原型:69\nC:shortAPIENTRYSetAxisAcc_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longacceleration);解释:设置轴的加速度参数。在控制卡初始化时,每个轴的加速度均为0。轴正在运行时是否可调用:否参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3Acceleration轴的加速度;范围:长整型数,必须是正值;单位:脉冲数/秒平方。返回码:(0)成功(-1)非法参数参考函数:SetAxisPos_9030SetAxisVel_9030StartAxis_9030SetAxisSAcce_9030§3.6.7SetAxisSAcc_9030设置设置轴S型加速度函数编号:72函数原型:C:shortAPIENTRYSetAxisSAcce_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortPowerFlag);解释:(保留函数)70\n轴正在运行时是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3Axis_No:轴号,可能值0,1,2,3PowerFlag:1-4S型加速度(1,2,3,4)指数,1=直线形加速度。系统缺省值:2返回码:(0)成功(-1)非法参数参考函数:SetAxisAcc_9030§3.6.8StartAxis_9030更新梯形包络线参数,轴开始运动函数编号:7函数原型:C:shortAPIENTRYStartAxis_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:轴以位置模式开始运行,在这之前,必须设好轴的位置、速度和加速度。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:SetAxisPos_9030SetAxisVel_903071\nSetAxisAcc_9030§3.6.9StartAxisVel_9030设置轴为速度模式函数编号:8函数原型:C:shortAPIENTRYStartAxisVel_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longvelocity);解释:轴以速度模式开始运行,在这之前,必须设好轴的加速度。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3velocity:轴的最大速度,可正负,单位:脉冲数/秒(Hz)。返回码:(0)成功(-1)不成功§3.6.10AbortAxis_9030轴停止,在30毫秒之内减速停止函数编号:19函数原型:C:shortAPIENTRYAbortAxis_9030(unsignedshortBoard_NO,unsignedshortAxis_No);72\n解释:这个函数将使轴的速度在30毫秒之内降为零。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:StopAxis_9030CeaseAxis_9030§3.6.11SetAxisStopDec_9030设轴的Stop命令的减速度(固件V5.1以上版)函数编号:122函数原型:C:shortAPIENTRYSetAxisStopDec_9030(unsignedshortBoard_NO,shortAxis_No,longdeceleration);解释:这个函数设StopAxis_9030函数的减速度值。系统缺省值为1000。轴正在运行时是否可调用:是参数:Board_NO:卡号,可能值0,1,2,373\nAxis_No:轴号,可能值0,1,2,3deceleration:轴的减速度;范围:长整型数,必须是正值;单位:脉冲数/秒平方。返回码:(0)成功(-1)不成功参考函数:StopAxis_9030§3.6.12StopAxis_9030轴停止,按所设加速度减速停止函数编号:9函数原型:C:shortAPIENTRYStopAxis_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:这个函数将使轴的速度以用户设定的减速度方式降为零。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:AbortAxis_9030CeaseAxis_903074\n§3.6.13CeaseAxis_9030轴停止,立即停止,无减速过程函数编号:20函数原型:C:shortAPIENTRYCeaseAxis_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:这个函数将使轴的速度立即降为零。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:StopAxis_9030AbortAxis_9030§3.6.14Home_9030轴位置寄存器清零函数编号:3函数原型:C:shortAPIENTRYHome_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:这个函数将把轴内部位置计数器清零。75\n注意:在9030卡内部,每个轴有2个位置计数器:1轴理论位置计数器;(在9030内部对轴所发脉冲数进行计数)2轴编码器反馈位置计数器。当轴的工作模式不同时,该函数作用有所不同,总结如下:1=开环脉冲模式:轴理论位置计数器清零2=位置闭环脉冲输出模式:轴理论位置计数器和轴编码器反馈位置计数器清零轴正在运行时是否可调用:否参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:ReadAxisPos_9030§3.6.15HomeFB_9030轴位置编码器清零函数编号:108函数原型:C:shortAPIENTRYHomeFB_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:这个函数将把轴编码器反馈位置计数器清零。76\n当轴的工作模式是2(位置闭环脉冲输出模式)时,应绝对禁止用该函数对轴编码器反馈位置计数器清零。设该函数的目的是为了当轴工作在0、1模式下,可单独使用该轴的编码器反馈位置计数器。轴正在运行时是否可调用:工作模式0、1时,是参数:Board_NO卡号,可能值0,1,2,3Axis_No轴号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:ReadAxisPos_9030§3.6.16GoHome_9030轴回Home点函数编号:24函数原型:C:shortAPIENTRYGoHome_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longgoHomeVel,longLeaveHomeVel,longLeaveHomePos,longLookZIndexVel,longPulseNum,shortZ_IndexFlag);解释:这个函数将使轴进行真实回Home点操作。回Home点过程示意如下:连线图示意:电机负限位开关77\n正限位开关Home点开关步骤1:从当前位置向Home点移动步骤2:压上Home点步骤3:脱离Home点步骤4:脱离Home点一段距离步骤5:启动Index捕获,继续运动,在一圈内找Index点,如果不找Index点,则转步骤7。步骤6:当Index信号产生时,转步骤7。78\n步骤7:停止运动,轴位置计数器清零,GoHome完成在回Home点时,回Home点方向、速度,脱离Home点方向、速度及距离均可由参数设定。只有在轴Home点有效时(由函数SetAxisIO_9030设定),GoHome函数才有效。注意:在GoHome_9030命令之前,确保有SetAxisAcc_9030(设置轴加速度)命令轴正在运行时是否可调用:否参数:Board_NO:0-3,板号Axis_No:0-3,轴号goHomeVel:轴回Home点速度;范围:长整型数;可正负;单位:Hz,轴的脉冲频率。决定步骤1的方向和速度。LeaveHomeVel:轴离开Home点速度;范围:长整型数;可正负;单位:Hz,轴的脉冲频率。决定步骤3、4的方向和速度。该速度值一般要选择小一点。LeaveHomePos:轴离开Home点距离;范围:长整型数,必须是正值;单位:脉冲个数。决定步骤4的距离。LookZIndexVel:轴找一转脉冲速度;范围:长整型数;单位:Hz,轴的脉冲频率。PulseNum:四倍频后的轴编码器反馈每转脉冲数(或一转脉冲的间隔脉冲个数(光栅尺反馈))Z_IndexFlag:0或1;当轴的工作模式为2时,可设回零找一转脉冲模式:0=回零不找一转脉冲;1=回零找一转脉冲返回码:(0)成功(-1)非法参数参考函数:ReadAxisPos_9030、Home_9030、SetAxisIO_9030§3.6.17LookZIndex_9030轴找一转脉冲(轴回Home点的分解动作)79\n函数编号:114函数原型:C:shortAPIENTRYLookZIndex_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longLookZIndexVel,longPulseNum);解释:这个函数将使轴单纯找一转脉冲(Index点)操作。也是轴回Home点的分解动作(步骤5以后动作)轴正在运行时是否可调用:否参数:Board_NO:0-3,板号Axis_No:0-3,轴号LookZIndexVel:轴找一转脉冲速度;范围:长整型数;可正负;单位:Hz,轴的脉冲频率。PulseNum:四倍频后的轴编码器反馈每转脉冲数(或光栅尺反馈一转脉冲的间隔脉冲个数)返回码:(0)成功(-1)非法参数参考函数:ReadAxisPos_9030、Home_9030、SetAxisIO_9030§3.6.18SetAxisOffset_9030设置轴位置偏移值函数编号:84函数原型:C:shortAPIENTRYSetAxisOffset_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longOffset);解释:该函数将预设轴位置计数器的值。Home_9030命令或GoHome_9030命令将轴位置的偏80\n移值(预设轴位置寄存器的值)清零。注意:在9030卡内部,每个轴有2个位置计数器:1理论位置计数器;2轴编码器反馈位置计数器。当轴的工作模式不同时,该函数作用有所不同,总结如下:1=开环脉冲模式:设轴理论位置计数器初值2=位置闭环脉冲输出模式:设轴理论位置计数器和轴编码器反馈位置计数器初值轴正在运行时是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3Axis_No:轴号,可能值0,1,2,3offset:轴位置的偏移值;范围:长整型数;单位:脉冲个数。返回码:0或-1,-1=不成功,0=成功参考函数:§3.6.19SetAxiFBOffset_9030设轴位置编码器偏移值函数编号:109函数原型:C:shortAPIENTRYSetAxisFBOffset_9030(unsignedshortBoard_NO,unsignedshortAxis_No,longOffset);解释:该函数将预设轴轴编码器反馈位置计数器的初值。当轴的工作模式是2(位置闭环脉冲输出模式)时,应绝对禁止用该函数对轴编码器反81\n馈位置计数器设初值。设该函数的目的是为了当轴工作在0、1模式下,可单独使用该轴的编码器反馈位置计数器。轴正在运行时是否可调用:工作模式0、1、4、5时,是轴正在运行时是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3Axis_No:轴号,可能值0,1,2,3offset:轴轴编码器反馈位置计数器的偏移值;范围:长整型数;单位:脉冲个数。返回码:0或-1,-1=不成功,0=成功参考函数:§3.6.20SetAxisPEL_9030设置轴位置闭环误差极限函数编号:109函数原型:C:shortAPIENTRYSetAxisPEL_9030(unsignedshortBoard_NO,unsignedshortAxis_No,unsignedshortPosErrL);解释:设置轴位置闭环误差极限轴正在运行时是否可调用:否参数:82\nBoard_NO:0-3,板号Axis_No:0-3,轴号PosErrL:设置轴位置闭环误差极限;范围:整型数(0-65535);单位:无。返回码:0或-1,-1=不成功,0=成功参考函数:*§3.7电子齿轮与位置跟随§3.7.1StartAxisEGear_9030设置轴电子齿轮运动函数编号:75函数原型:C:shortAPIENTRYSetAxisEGear_9030(unsignedshortBoard_NO,unsignedshortAxis_No,unsignedshortF_Axis_No,doubleRate,doubleKp);解释:该函数设定轴以电子齿轮模式工作,设定完后立即生效。主从关系、齿轮比可通过参数设定。主从关系可随意设定,只要不违反自己随自己或父子孙的伦理关系就可以。设定时要求主动轴、从动轴均在停止状态(9030卡会在两轴停止状态那一刻读取两轴的当前位置,以此为两轴的开始位置),在设定完后从动轴为电子齿轮模式,而主动轮可以为其它任意模式(除了Home和GoHome命令)。轴正在运行时是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3Axis_No:0-3,从动轴号F_Axis_No:0-3,主动轴号83\nRate:从动轴跟随比率:设:A1=从动轴开始位置,A2=从动轴实时位置,单位:脉冲数B1=主动轴开始位置,B2=主动轴实时位置,单位:脉冲数则:A2-A1Rate=B2-B1可正负;范围:绝对值0.001-1000;单位:无;分辨率:0.001Kp:跟随PID调节系数;范围:0.001-1000;单位:无;分辨率:0.001,一般设为0.1、0.2就可。返回码:(0)成功(-1)不成功参考函数:CancelAxisFEG_9030§3.7.2SetActiveEncoder_9030在轴跟随编码器运动之前,设主动编码器号函数编号:121函数原型:C:shortAPIENTRYSetActiveEncoder_9030(unsignedshortBoard_NO,unsignedshortAxis_No);解释:该函数为函数SetAxisFE_9030服务,指示主动编码器是哪个。在9030卡中有5个编码器计数器(4个轴每轴1个,还有一个附加编码器),当设定轴跟随编码器运动时,这5个编码器计数器都可能是主动编码器,限制条件是当轴工作在2、3模式下,不能自己跟随自己的编码器。在9030卡中每一时刻主动编码器只有一个,9030卡初始化时,缺省的主动编码器是附加编码器。轴正在运行时是否可调用:根据参数决定84\n参数:Board_NO:卡号,可能值0,1,2,3Axis_No:0-4,0-3对应轴号,4=附加编码器,缺省为4返回码:(0)成功(-1)不成功参考函数:CancelAxisFEG_9030§3.7.3SetAxisFE_9030设置轴跟随编码器运动函数编号:74函数原型:C:shortAPIENTRYSetAxisFE_9030(unsignedshortBoard_NO,unsignedshortAxis_No,doubleRate,doubleKp,shortMode1,shortMode2,shortMode3);解释:该函数设定轴以编码器控制模式工作,设定完后立即生效。跟随关系、跟随比可通过参数设定。在设定完后轴为编码器控制模式工作,这时编码器(或接手摇轮、或是某一轴的位置反馈)的运动将带动该轴运动,这当中编码器不能执行编码器位置清零命令(HomeEncode_9030命令)。轴正在运行时是否可调用:根据参数决定参数:Board_NO:卡号,可能值0,1,2,3Axis_No:0-3,轴号Rate:轴跟随比率:设:A1=从动轴开始位置,A2=从动轴实时位置,单位:脉冲数B1=编码器开始位置,B2=编码器实时位置,单位:脉冲数则:85\nA2-A1Rate=B2-B1可正负;范围:绝对值0.001-1000;单位:无;分辨率:0.001Kp:跟随PID调节系数;范围:0.001-1000;单位:无;分辨率:0.001,一般设为0.1、0.2就可。Mode1:0=速度模式,1=位置模式在速度模式下,轴的位置跟随不会严格按跟随比率来执行,运动效果更为柔和,而位置模式则会严格按跟随比率执行,运动柔和与否可用参数Kp调节。Mode2:0=不自动清零,1=自动清零9030卡的编码器计数器虽为32位,但为了防止编码器计数器溢出,可在开始时自动将编码器计数器清零。当主动编码器是某轴的位置反馈编码器时,且该轴工作在2、3模式时,应绝对禁止用自动清零模式Mode3:0=停止状态跟随,1=可运动状态跟随当轴的速度不为零时(运动状态)可立即转为编码器跟随模式。在实践中,比如数控铣床的攻丝、数控车床的切螺纹等操作,均是某一轴在运动状态下过渡到与编码器跟随。返回码:(0)成功(-1)不成功参考函数:CancelAxisFEG_9030§3.7.4CancelAxisFEG_9030取消轴跟随运动函数编号:76函数原型:C:shortAPIENTRYCancelAxisFEG_9030(unsignedshortBoard_NO,unsignedshortAxis_No);86\n解释:当轴以电子齿轮模式工作或以编码器控制模式工作时,要取消这种模式,则可用该函数解除轴的这两种工作模式。解除轴跟随模式只能用该函数或轴停止命令(StopAxis_9030、AbortAxis_9030、CeaseAxis_9030)。(插补模式下的编码器控制模式除外,看函数LM_LineFE_9030)轴正在运行时是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3Axis_No:0-3,轴号返回码:(0)成功;(-1)不成功§3.7.5GetEnAuto0Flag_9030获得主动编码器自动清零标志函数编号:80函数原型:C:shortAPIENTRYGetEnAuto0Flag_9030(unsignedshortBoard_NO);解释:该函数将获得主动编码器位置计数器是否被9030卡自动清零。在执行LM_LineFE_9030命令时,为了防止主动编码器计数器溢出,9030卡可能对主动编码器计数器清零。轴正在运行时是否可调用:是参数:卡号,可能值0,1,2,3返回码:0:1:主动编码器计数器曾经被9030卡自动清零过255:命令不成功87\n参考函数:ReadEncoderPos_9030LM_LineFE_9030ResetEn0Flag_9030§3.7.6ResetEn0Flag_9030主动编码器自动清零标志置0函数编号:79函数原型:C:shortAPIENTRYResetEn0Flag_9030(unsignedshortBoard_NO);解释:当用函数GetEnAuto0Flag_9030得到主动编码器位置计数器被自动清零(编码器自动清零标志位在9030卡中被置1),用该函数将主动编码器自动清零标志位置0。轴正在运行时是否可调用:是参数:卡号,可能值0,1,2,3返回码:0或-1,-1=不成功,0=成功参考函数:ReadEncoderPos_9030LM_LineFE_9030GetEnAuto0Flag_903088\n批注[yu4]:保留§3.8.4SetAxisMotorOnOff_9030设轴电机On或Off,使能函数编号:110函数原型:C:shortAPIENTRYSetAxisMotorOnOff_9030(unsignedshortBoard_NO,unsignedshortAxis_No,shortOnOff);解释:该函数控制轴的伺服电机使能信号,电机使能信号参看§1.5电机控制信号节。参数:Board_NO:0-3,板号Axis_No:0-3,轴号OnOff:0,1;0=Off,1=On。返回码:0或-1,-1=不成功,0=成功§3.9通用IO读写函数§3.9.1Set_Emergency_Stop_9030设置IO急停信号函数编号:29函数原型:C:shortAPIENTRYSet_Emergency_Stop_9030(unsignedshortBoard_NO,unsignedshortMask,shortMode);解释:89\n该函数设置I1-I8中的某一个输入点为急停信号输入点。9030卡在初始化后,急停信号输入点是无效的。轴正在运行时是否可调用:是参数:Board_NO:0-3,板号Mask:0、1-8,急停信号与通用输入点I1-I8相联,0表示无效,9030卡上电时缺省为无效。注意:输入点必须是1-8点。Mode:1、2、3;1=CeaseAxis_9030模式轴停止;2=AbortAxis_9030模式轴停止3=StopAxis_9030模式轴停止返回码:(0)成功;(-1)不成功§3.9.2ReadIO_9030读板上数字IO(输入)点信号状态函数编号:14函数原型:C:longAPIENTRYReadIO_9030(unsignedshortBoard_NO);解释:读取通用输入点I1-I32状态,返回数值转换为二进制时的0-31位有效。轴正在运行时是否可调用:是参数:Board_NO:0-3,板号返回码:(>=0)成功,0-31位为通用输入点I1-I32状态(-1)不成功参考函数:ReadIOBit_903090\nWriteIo_9030§3.9.3ReadIOBit_9030按位读板上数字IO(输入)点信号状态函数编号:14函数原型:C:shortAPIENTRYReadIOBit_9030(unsignedshortBoard_NO,shortIndex);解释:按位读取通用输入点I1-I32状态。轴正在运行时是否可调用:是参数:Board_NO:0-3,板号Index:1-32,输入点索引号返回码:0-1输入点状态(-1)不成功参考函数:ReadIO_9030WriteIo_9030§3.9.4WriteIo_9030置板上数字IO(输出)点信号函数编号:16函数原型:C:shortAPIENTRYWriteIo_9030(unsignedshortBoard_NO,unsignedshortIO_V);解释:这个函数将置板上8路通用数字输出点状态。达林顿输出方式:1:导通;0:断开。91\n轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3IO_V输出点值,WORD型,低8位有效,对应O1-O8,8个输出点状态返回码:(0)成功(-1)参数非法参考函数:ReadIO_9030§3.9.5WriteIoBit_9030按位置板上数字IO(输出)点信号函数编号:81函数原型:C:shortAPIENTRYWriteIoBit_9030(unsignedshortBoard_NO,unsignedshortIO_V,shortIndex);解释:这个函数将置板上8路通用数字输出点状态。达林顿输出方式:1:导通;0:断开。轴正在运行时是否可调用:是参数:Board_NO:卡号,可能值0,1,2,3IO_V:0-1,输出点值92\nIndex:1-8,输出点索引号返回码:(0)成功(-1)参数非法参考函数:ReadIO_9030§3.9.6ReadOs_9030读取输出点O1-O8状态函数编号:82函数原型:C:shortAPIENTRYReadOs_9030(unsignedshortBoard_NO);解释:读取通用输出点O1-O8状态,返回数值转换为二进制时的0-7位有效。由于可以用插补模式来设置输出点(函数LM_IOOut_9030),而该模式的输出点状态输出不是立即生效的,所以可以用该函数来随时检测输出点状态。轴正在运行时是否可调用:是参数:Board_NO:卡号,可能值0,1,2,3返回码:0-256低8位有效,对应O1-O8,8个输出点状态(-1)参数非法93\n参考函数:ReadOsBit_9030§3.9.7ReadOsBit_9030按位读取输出点O1-O8状态函数编号:83函数原型:C:shortAPIENTRYReadOsBit_9030(unsignedshortBoard_NO,shortIndex);解释:按位读取通用输出点O1-O8状态。由于可以用插补模式来设置输出点,由于可以用插补模式来设置输出点(函数LM_IOOut_9030),而该模式的输出点状态输出不是立即生效的,所以可以用该函数来随时检测输出点状态。轴正在运行时是否可调用:是参数:Board_NO:卡号,可能值0,1,2,3Index:1-8,输出点索引号返回码:0-1对应输出点状态(-1)参数非法参考函数:ReadOs_903094\n§3.9.8ReadMPGIO_9030读手轮IO输入点MPG_I1-MPG_I7状态函数编号:118函数原型:C:longAPIENTRYReadMPGIO_9030(unsignedshortBoard_NO,shortIndex);解释:读取附加编码器输入点I1-I8状态。硬件部分参看§1.7附加编码器接口节轴正在运行时是否可调用:是参数:Board_NO:0-3,板号Index:0=全读,返回值的bit0-bit7对应MPG_I1-MPG_I8状态,1-8=按位读取,返回对应位状态返回码:Index=0时0-7位有效,对应输入点MPG_I1-MPG_I8状态,Index=1-8时,返回对应位状态(0或1)-1=不成功,参考函数:ReadIOBit_9030WriteIo_9030§3.10附加编码器控制函数§3.10.1ReadEncoderPos_9030读取编码器位置函数编号:10函数原型:C:longAPIENTRYReadEncoderPos_9030(unsignedshortBoard_NO);解释:95\n该函数返回附加编码器计数器值轴正在运行时是否可调用:是参数:卡号,可能值0,1,2,3返回码:编码器位置;范围;长整型数;单位,脉冲个数。参考函数:HomeEncoder_9030§3.10.2HomeEncoder_9030附加编码器位置清零函数编号:11函数原型:C:shortAPIENTRYHomeEncode_9030(unsignedshortBoard_NO);解释:该函数将附加编码器位置计数器清零。可以通过调用函数ReadEncoderPos_9030来得到编码器当前位置计数器。轴正在运行时是否可调用:当有轴跟附加随编码器时不能,其它情况下可以参数:卡号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:ReadEncoderPos_903096\n§3.10.3SetEncodeCount_9030设附加编码器初值函数编号:113函数原型:C:shortAPIENTRYSetEncodeCount_9030(unsignedshortBoard_NO,longOffset);解释:该函数设附加编码器位置计数器初值。可以通过调用函数ReadEncoderPos_9030来得到编码器当前位置计数器。轴正在运行时是否可调用:当有轴跟附加随编码器时不能,其它情况下可以参数:卡号,可能值0,1,2,3offset:编码器初值;范围:长整型数;单位:脉冲个数。返回码:(0)成功(-1)不成功参考函数:ReadEncoderPos_9030§3.11PWM脉冲/DA输出控制9030有一路附加的PWM/DA输出源,硬件设置部分参看§1.6Vout/PWM输出选择§3.11.1PwmOut_9030PWM脉冲输出函数编号:12函数原型:97\nC:shortAPIENTRYPwmOut_9030(unsignedshortBoard_NO,longfrequency,floatPulse_Highf);解释:9030卡上有一路PWM输出,调用该函数即可使其输出设定的频率和占空比的PWM信号。轴正在运行时是否可调用:是参数:Board_NO:0-3,板号frequency:1-1000000;PWM输出频率;单位:赫兹(Hz)Pulse_Highf:占空比,范围:0.0-1.0;精度:不小于1%返回码:(0)成功(-1)参数非法参考函数:PwmOut2_9030PwmStop_9030DAOut_9030LM_PWM_9030§3.11.2PwmOut2_9030PWM脉冲输出函数编号:12函数原型:C:shortAPIENTRYPwmOut2_9030(unsignedshortBoard_NO,longfrequency,floatPulse_Highf);解释:9030卡上有一路PWM输出,调用该函数即可使其输出设定的频率和占空比的PWM信号。轴正在运行时是否可调用:是98\n参数:Board_NO:0-3,板号frequency:1-1000000;PWM输出频率;单位:赫兹(Hz)Pulse_Highf:高电平脉冲宽度,单位:毫秒;精度(秒):0.00000001当frequency≥1525;0.0004当frequency<1525返回码:(0)成功(-1)参数非法参考函数:PwmOut_9030PwmStop_9030DAOut_9030LM_PWM_9030§3.11.3PwmStop_9030PWM输出停止函数编号:13函数原型:C:shortAPIENTRYPwmStop_9030(unsignedshortBoard_NO);解释:停止PWM输出。轴正在运行时是否可调用:是参数:Board_NO卡号,可能值0,1,2,3返回码:(0)成功(-1)参数非法99\n参考函数:PwmOut_9030PwmOut2_9030DAOut_9030LM_PWM_9030§3.11.4DAOut_9030DA(数模转换)模拟量输出函数编号:68函数原型:C:shortAPIENTRYDAOut_9030(unsignedshortBoard_NO,doubleDA_Avlue);解释:轴正在运行时是否可调用:是参数:Board_NO:0-3,板号DA_Avlue:-10-+10V;精度:1/4096;即12位.该DA输出与PWM输出占用同一个硬件资源,通过9030端子板上的跳线选择是DA输出还是PWM输出.返回码:(0)成功(-1)参数非法参考函数:PwmOut_9030PwmStop_9030LM_PWM_9030100\n§3.12插补函数§3.12.1插补初始化函数§3.12.1.1LM_SetXAxis_9030将实际轴与插补引擎的X轴相匹配函数编号:32函数原型:C:shortAPIENTRYLM_SetXAxis_9030(unsignedshortBoard_NO,shortAxis_NO,doublefactor_c_t,doubledelta);解释:该函数将实际轴与插补引擎虚拟的X轴相匹配。插补引擎虚拟了一个XYZW坐标系,在执行插补运算前,用户必须将这个虚拟的XYZW坐标系实际化,可对虚拟的XYZW坐标的任意两轴直至四轴全部实际化。同理:也有YZW轴的匹配函数:shortLM_SetYAxis_9030(shortBoard_NO,shortAxis_NO,doublefactor_c_t,doubledelta);shortLM_SetZAxis_9030(shortBoard_NO,shortAxis_NO,doublefactor_c_t,doubledelta);shortLM_SetWAxis_9030(shortBoard_NO,shortAxis_NO,doublefactor_c_t,doubledelta);在插补引擎正在运行当中是否可调用:否参数:Board_NO:卡号,可能值0,1,2,3axis_NO:轴号,可能值为:0,1,2,3。factor_c_t:轴的脉冲当量。即:电机转动一个脉冲的步距角时,该轴移动多少用户单位。例如1,某一直线轴通过滚珠丝杠与步进电机直联,该滚珠丝杠的螺距是5毫米,而电机转一圈需2000个脉冲,则:轴的脉冲当量=5/2000=0.0025;0.0025的含义是:一个脉冲将使该轴移动0.0025毫米。101\n例如2,某一直线轴通过滚珠丝杠与伺服电机直联,该滚珠丝杠的螺距是5毫米,而伺服电机编码器为2500线,由于四倍频或伺服电机电子齿轮设定的关系,伺服电机转一圈需10000个脉冲,则:轴的脉冲当量=5/10000=0.0005;0.0005的含义是:一个脉冲将使该轴移动0.0005毫米。轴的脉冲当量很重要,轴的脉冲当量确定后,本书以下有关轴的直线、圆弧插补的距离单位就确定。上例1中如果:factor_c_t=0.0025,则该轴的距离单位就是毫米。delta:该轴动态准确定位的误差值。单位为用户单位。一般来说,该值不能小于轴的脉冲当量,以轴的脉冲当量的3-5倍为宜。在插补运算时,在每行插补运动开始之前,系统将以该值乘于10倍为依据来判断轴位置误差是否超限,如果超越极限,插补引擎将停止工作并报警。报警号为3(插补误差超限)。返回码:(0)成功(-1)不成功参考函数:LM_OffXAxis_9030§3.12.1.2LM_OffXAxis_9030撤消插补引擎的X轴匹配函数编号:33函数原型:C:shortAPIENTRYLM_OffXAxis_9030(unsignedshortBoard_NO);解释:该函数将撤消插补引擎的X轴匹配。它是函数LM_SetIpol_X_Axis9030的反操作。同理:也有YZW轴的撤消匹配函数:102\nshortLM_OffYAxis_9030(shortBoard_NO);shortLM_OffZAxis_9030(shortBoard_NO);shortLM_OffWAxis_9030(shortBoard_NO);在插补引擎正在运行当中是否可调用:否参数:Board_NO卡号,可能值0,1,2,3返回码:(0)成功(-1)不成功参考函数:LM_SetIpol_X_Axis9030§3.12.1.3LM_GetXStartPos_9030获得插补轴X当前位置函数编号:54函数原型:C:shortAPIENTRYLM_GetXStartPos_9030(unsignedshortBoard_NO,double*Pos);解释:指示9030卡,轴的现在位置是轴插补的开始位置,并可获得轴当前位置(用户单位),在发送插补命令(LM_Line_9030,LM_ArcCCW_9030)开始前调用,类似的函数还有:shortAPIENTRYLM_GetYStartPos_9030(unsignedshortBoard_NO,double*Pos);shortAPIENTRYLM_GetZStartPos_9030(unsignedshortBoard_NO,double*Pos);shortAPIENTRYLM_GetWStartPos_9030(unsignedshortBoard_NO,double*Pos);注意:在该命令之前,先写入LM_CleanBuff_9030(清空插补命令缓冲区)命令在插补引擎正在运行当中是否可调用:否103\n参数:Board_NO:0-3,板号Pos:获得轴插补的开始位置,单位为用户单位。指针类参数,可以为NULL(空指针),VB用户可以直接设为0,或用同等函数LM_GetAxisStartPos_9030。返回码:(0)成功(-1)不成功参考函数:LM_GetAxisStartPos_9030§3.12.1.4LM_GetAxisStartPos_9030获得插补轴当前位置函数编号:54函数原型:C:doubleAPIENTRYLM_GetAxisStartPos_9030(unsignedshortBoard_NO,shortAxisFlag);解释:指示9030卡,轴的现在位置是轴插补的开始位置,并获得轴当前位置(用户单位),在发送插补命令(LM_Line_9030,LM_ArcCCW_9030)开始前调用。注意:如果在用户程序中多次用到上述命令,在第二次用该命令之前,先写入LM_CleanBuff_9030(清空插补命令缓冲区)命令在插补引擎正在运行当中是否可调用:否参数:Board_NO:0-3,板号AxisFlag:1-4,指示是那个轴;1:X轴,2:Y轴,3:Z轴,4:W轴。返回码:轴的当前位置。用户单位当返回轴位置=-2147483648时,表示不成功,有错误产生。104\n参考函数:LM_GetXStartPos_9030§3.12.2插补顺序执行函数§3.12.2.1LM_Line_9030写入直线插补命令函数编号:42函数原型:C:shortAPIENTRYLM_Line_9030(unsignedshortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doubleSpeed,longLineNO);解释:该函数将直线插补命令写入插补缓冲区。在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号xPos、yPos、zPos、wPos:XYZW轴的终点位置;绝对坐标,单位为用户单位。Speed:插补速度,单位:用户单位/分钟。LineNO:用户自定义行号。当插补引擎运行到该行时,用LM_GetWorkLine9030(long*LineNO)函数可检测该行号值。例1直线插补(C语言):设XYZ轴从当前位置(0,0,0,0)直线移动到(100,0,0,0)位置,再直线移动到(100,100,0,0)位置,再直线移动到(0,100,0,0)位置,再直线移动到(0,0,0,0)位置;如下图:Y0,100,0100,100,0X100,0,0105\n插补速度F=200,行号从100开始;则:doubleF=200;longLineNO=100;LM_Line_9030(0,100,0,0,0,F,LineNO);LM_Line_9030(100,100,0,0,F,LineNO+1);LM_Line_9030(0,100,0,0,F,LineNO+2);LM_Line_9030(0,0,0,0,F,LineNO+3);LM_End_9030(0,LineNO+4);LM_Start_9030(0,LineNO+5);返回码:(0)成功(-1)不成功参考函数:LM_ArcCW_9030LM_End_9030LM_Start_9030§3.12.2.2LM_LineMaxV_9030直线插补函数编号:69函数原型:C:shortAPIENTRYLM_LineMaxV_9030(unsignedshortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doubleSpeed,doubleMaxSpeed,longLineNO);解释:该函数与LM_Line_9030区别是:①可单独指定本行的最大速度,②执行到该行时不会有106\nPWM信号输出(如果用户用到LM_PWM_9030函数)。在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号xPos:X轴插补的终点位置(绝对值),单位为用户单位。yPos:y轴插补的终点位置(绝对值),单位为用户单位。zPos:z轴插补的终点位置(绝对值),单位为用户单位。wPos:w轴插补的终点位置(绝对值),单位为用户单位。Speed:插补速度,单位:用户单位/分钟MaxSpeed:本行插补最大速度,单位:用户单位/分钟LineNO:插补行号,用户自由设定返回码:(0)成功(-1)不成功参考函数:§3.12.2.3LM_LineMeasure_9030直线插补及测量IO点输入函数编号:65函数原型:C:shortAPIENTRYLM_LineMeasure_9030(unsignedshortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,shortIO_Index,shortMode,doubleSpeed,longLineNO);解释:直线插补并检测由参数IO_Index指示的输入点状态,如检测到输入点,就立即停止。该函数与LM_Line_9030区别是:①本行的最大速度就是由Speed指定(函数LM_SetSpeedRate_9030不能将其增速)。②执行到该行时不会有PWM信号输出(如果用户用到LM_PWM_9030函数)。③当9030卡检测到由IO_Index指定的输入点后立即停止(轴停止模式为CeaseAxis_9030)。④在本行执行完之前,不能再加入新的插补函数,如果加入,9030卡将报错,错误号为18。⑤在本行执行当中,如果检测到输入点(由参数IO_Index指示),插补运动立即停止,这时插补状态(由函数LM_GetState_9030获得)将为3(被LM_End_9030结束),函数107\nLM_GetMeasureState_9030将返回状态1。⑥在本行执行当中,如果没有检测到输入点,在本行执行完后插补运动也将停止,这时插补状态(由函数LM_GetState_9030获得)将为4(被LM_End_9030结束),函数LM_GetMeasureState_9030将返回状态0。⑦无论检测到输入点与否,在本行执行完后,如果还要进行插补运动,都要进行如下操作:LM_CleanBuff_9030(…);//清除插补缓存LM_GetXStartPos_9030(…);//重新获得插补开始位置LM_GetYStartPos_9030(…);LM_GetZStartPos_9030(…);LM_GetWStartPos_9030(…);在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号xPos:X轴插补的终点位置(绝对值),单位为用户单位。yPos:y轴插补的终点位置(绝对值),单位为用户单位。zPos:z轴插补的终点位置(绝对值),单位为用户单位。wPos:w轴插补的终点位置(绝对值),单位为用户单位。IO_Index:1-8;通用IO点输入点序号,Mode:1-4;1:通用IO点输入点为1时,立即停止(CeaseAxis_9030模式)。2:通用IO点输入点为1时,立即停止(AbortAxis_9030模式)。3:通用IO点输入点为0时,立即停止(CeaseAxis_9030模式)。4:通用IO点输入点为0时,立即停止(AbortAxis_9030模式)。Speed:插补速度,单位:用户单位/分钟LineNO:插补行号,用户自由设定返回码:(0)成功(-1)不成功参考函数:LM_GetMeasureState_9030108\n§3.12.2.4LM_GetMeasureState_9030获得当前测量状态函数编号:66函数原型:C:shortAPIENTRYLM_GetMeasureState_9030(unsignedshortBoard_NO);解释:该函数将获得当前测量状态(由插补命令LM_LineMeasure_9030产生)。在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号返回码:0:没有检测到测量信号1:检测到测量信号255:命令不成功注意:检测到输入点后,如果有新的直线插补测量运动开始执行,测量状态将自动转为0状态。参考函数:§3.12.2.5LM_LineFE_9030插补模式的轴跟随编码器位置命令函数编号:77函数原型:C:shortAPIENTRYLM_LineFE_9030(unsignedshortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doubleRate,doubleKp,shortMode,doubleSpeed,longLineNO);109\n解释:插补模式下的轴跟随编码器位置命令。该函数将写入插补缓冲区。该函数的主要目的是为了实现螺纹切削。以数控铣床为例,编码器同轴安装在主轴上,用该函数可实现硬攻丝。在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号xPos、yPos、zPos、wPos:XYZW轴的终点位置;绝对坐标,单位为用户单位。XYZW轴中只有一个轴可以实现插补模式的编码器位置跟随,9030卡根据各轴起点与终点位置之差是否为0,自动判断那个轴跟随。如果有多于一个轴的位置之差不为0,9030卡将报错。Mode:0,1;0=到达目标,立即停止跟随;0=到达目标,不停止跟随,由后续命令决定;当Mode=0时,跟随轴到达或超过终点位置时,跟随轴将立即停止(以AbortAxis_9030模式)。当Mode=1时,跟随轴到达或超过终点位置时,将由后续命令决定,细节如下:直线插补命令:同轴同方向,跟随轴将不停,自动过渡到直线插补;其它情况下,跟随轴将立即停止(以AbortAxis_9030模式)。圆弧插补命令:跟随轴将立即停止(以AbortAxis_9030模式)。其它插补命令:(包括LM_End_9030命令)不停止跟随,再由后续命令决定。Rate:轴跟随比率:设:A1=跟随轴开始位置,A2=跟随轴实时位置,单位:用户单位B1=编码器开始位置,B2=编码器实时位置,单位:脉冲数则:A2-A1Rate=B2-B1可正负;范围:绝对值0.001´跟随轴脉冲当量至1000´跟随轴脉冲当量;单位:无;分辨率:0.001´跟随轴脉冲当量B1=编码器开始位置:9030卡根据前面是否有未完成的轴跟随编码器位置命令对编码器进行清零操作。如果没有,9030卡将自动清零编码器计数器,防止计数器溢出。110\n是否自动清零可由函数GetEnAuto0Flag_9030探知。Kp:跟随PID调解系数;范围:0.001-1000;单位:无;分辨率:0.001Speed:插补预期速度,也应该是本行插补最大速度,单位:用户单位/分钟实际该行的插补速度将由Rate参数和编码器所反馈的速度决定。LineNO:插补行号,用户自由设定例1用该函数实现数控铣床的硬攻丝(C语言):设主轴编码器线数为2500线,在9030卡中将四倍频,为:10000线;螺距为0.8;插补速度F=200,行号从100开始;则:doubleF=200;longLineNO=100;doubleRate=-1*0.8/10000;LM_Line_9030(0,0,0,0,0,F,LineNO);LM_Line_9030(0,0,-5,0,F,LineNO+1);LM_LineFE_9030(0,0,-25,0,1,Rete,0.1,F,LineNO+2);//Z轴-5至-25攻丝LM_IOOut_9030(0,……);//控制主轴反转LM_LineFE_9030(0,0,-5,0,0,Rete,0.1,F,LineNO+4);//Z轴-25至-5回退LM_End_9030(0,LineNO+5);LM_Start_9030(0,LineNO+6);返回码:(0)成功(-1)不成功参考函数:LM_ArcCW_9030LM_End_9030111\nLM_Start_9030§3.12.2.6LM_ArcCW_9030写入圆弧/螺旋线插补命令函数编号:43、44函数原型:CshortAPIENTRYLM_ArcCW_9030(unsignedshortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doublexcPos,doubleycPos,doubleSpeed,longLineNO);解释:该函数将圆心在xy平面的顺时针圆弧/螺旋线插补命令写入插补缓冲区。同理,还有另外两个类似的顺时针插补命令:shortLM_ArcCW_YZ_9030(shortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doubleycPos,doublezcPos,doubleSpeed,longLineNO);shortLM_ArcCW_ZX_9030(shortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doublezcPos,doublexcPos,doubleSpeed,longLineNO);以及三个逆时针插补命令:shortLM_ArcCCW_9030(shortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doublexcPos,doubleycPos,doubleSpeed,longLineNO);shortLM_ArcCCW_YZ_9030(shortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,doubleycPos,doublezcPos,doubleSpeed,longLineNO);shortLM_ArcCCW_ZX_9030(shortBoard_NO,doublexPos,doubleyPos,doublezPos,doublewPos,112\ndoublezcPos,doublexcPos,doubleSpeed,longLineNO);在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号XY平面:xPos、yPos、zPos、wPos:XYZW轴的终点位置;绝对坐标,单位为用户单位。xcPos:X轴的圆心位置(绝对值),单位为用户单位。ycPos:Y轴的圆心位置(绝对值),单位为用户单位。YZ平面:xPos、yPos、zPos、wPos:XYZW轴的终点位置;绝对坐标,单位为用户单位。ycPos:Y轴的圆心位置(绝对值),单位为用户单位。zcPos:Z轴的圆心位置(绝对值),单位为用户单位。ZX平面:xPos、yPos、zPos、wPos:XYZW轴的终点位置;绝对坐标,单位为用户单位。zcPos:Z轴的圆心位置(绝对值),单位为用户单位。xcPos:X轴的圆心位置(绝对值),单位为用户单位。Speed:插补速度,单位:用户单位/分钟。LineNO:用户自定义行号。例1(C语言):设XYZ轴的当前位置为0、0、0、0;要运行一个在XY平面的顺圆如下图:YX50,0100,0113\n插补速度是:500,行号为100;则:LM_ArcCW_9030(0,100,0,0,0,50,0,500,100);例2螺旋线插补(C语言):设XYZW轴从当前位置(0,0,0,0)直线移动到(100,0,0,0)位置,再以螺旋线轨迹移动到终点位置(0,100,50);如下图:Z刀具路径0,100,500,100,0Y100,0,0XF指定的进给速度插补速度F=200,行号从100开始;则:doubleF=200;longLineNO=100;LM_Line_9030(0,100,0,0,0,F,LineNO);LM_ArcCW_9030(0,0,100,50,0,0,0,F,LineNO+1);LM_End_9030(0,LineNO+2);LM_Start_9030(0,0);由F值指定的插补速度是指沿着圆弧的进给速度,直线轴的进给速度为:F(直线)=F*直线轴的长度/圆弧的弧长。决定插补速度F值时要十分注意直线轴的进给率不要超过各种限制。在上例中,圆弧插补均在XY平面完成,实际应用中有可能在YZ平面进行插补运动,比如在数控加工中心的机床上加工箱体零件,在箱体侧面铣一个圆孔,这时就会用到在不同平面的圆弧插补:Z114XY\n需要注意的是,XY平面、YZ平面、ZX平面的圆弧插补函数,轴终点位置参数、圆心坐标参数,其代入次序各不相同,见参数说明。返回码:大于0成功小于0非法参数参考函数:LM_Line_9030LM_End_9030LM_Start_9030§3.12.2.7LM_Wait_9030插补等待函数编号:60函数原型:C:shortAPIENTRYLM_Wait_9030(unsignedshortBoard_NO,unsignedlongMillisecond,longLineNO);解释:插补等待该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有265行.当插补引擎运行到该行时将暂停运行,在等待用户所设时间后,再开始下一步插补命令。在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号Millisecond:等待时间,毫秒LineNO:插补行号,用户自由设定115\n返回码:(0)成功(-1)不成功参考函数:§3.12.2.8LM_PWM_9030插补模式的PWM输出函数编号:61函数原型:C:shortAPIENTRYLM_PWM_9030(unsignedshortBoard_NO,longfrequency,doublePulse_Highf,doubleSpeed,longLineNO);解释:插补模式的PWM输出,占空比随速度变化。该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有4096行。当插补引擎运行到该行时将根据参数决定PWM输出.轴正在运行时是否可调用:是参数:Board_NO:0-3,板号frequency:1-1000000;PWM输出频率;单位:赫兹(Hz)当为0时,停止PWM输出Pulse_Highf:占空比,范围:0.0-1.0;精度:不小于1%该值对应插补速度达到Speed所设速度时的最大占空比,当插补速度大于Speed所设速度时,也按该参数输出.Speed:占空比随动的最大插补速度,单位:用户单位/分钟当该值为0时,表明不是随动模式,当插补引擎运行到该行时将根据frequency,Pulse_Highf参数值立即PWM输出.LineNO:插补行号,用户自由设定返回码:(0)成功(-1)不成功116\n§3.12.2.9LM_IOOut_9030插补模式的IO点输出函数编号:62函数原型:C:shortAPIENTRYLM_IOOut_9030(unsignedshortBoard_NO,shortIO_Index,shortIO_Value,longLineNO);解释:该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有4096行.当插补引擎运行到该行时将根据参数输出IO点.在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号IO_Index:1-8;通用IO点输出点序号,IO_Value:0-1;输出点值LineNO:插补行号,用户自由设定返回码:(0)成功(-1)不成功参考函数:§3.12.2.10LM_Wait_I_9030插补等待通用IO点输入函数编号:63函数原型:C:shortAPIENTRYLM_Wait_I_9030(unsignedshortBoard_NO,shortIO_Index,longLineNO);解释:该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有4096行.当插补引擎运行到该行时将等待,直到输入点为1时再执行下一行插补命令.117\n在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号IO_Index:1-8;通用IO点输入点序号,LineNO:插补行号,用户自由设定返回码:(0)成功(-1)不成功参考函数:§3.12.2.11LM_End_9030写入插补结束命令函数编号:45函数原型:C:shortAPIENTRYLM_End_9030(unsignedshortBoard_NO,longLineNO);解释:该命令将把插补数据送入9030卡的插补缓存器中,9030卡的插补缓存器总共有4096行。当插补引擎运行到该行时将停止运行,如要重新开始,则再送入插补数据命令(LM_Line_9030,LM_ArcCW_9030,LM_ArcCCW_9030),并发出LM_Start_9030命令在插补引擎正在运行当中是否可调用:是参数:Board_NO:0-3,板号LineNO:用户自定义行号。当插补引擎运行到该行时,用LM_GetLineNO_9030(shortBoard_NO);函数可检测该行号值。返回码:(0)成功118\n(-1)不成功参考函数:LM_Line_9030LM_ArcCW_9030LM_Start_9030§3.12.3插补控制函数§3.12.3.1LM_SetACCDec_9030设置插补加速度和插补减速度函数编号:40函数原型:C:shortAPIENTRYLM_SetACCDec_9030(unsignedshortBoard_NO,longacceleration,longdeceleration);解释:该函数将设置插补加速度和插补减速度。在插补引擎正在运行当中是否可调用:否参数:Board_NO0-3,板号acceleration插补加速度,用户单位/秒平方。范围:1-10000。缺省值:500Deceleration插补减速度,用户单位/秒平方。范围:1-10000。缺省值:500返回码:0成功(<0)不成功参考函数:LM_SetSAccePower_9030119\n§3.12.3.2LM_SetSAccPower_9030设置插补S型加速度(1,2,3,4)指数函数编号:71函数原型:C:shortAPIENTRYLM_SetSAccePower_9030(unsignedshortBoard_NO,shortPowerFlag);解释:(保留函数)在插补引擎正在运行当中是否可调用:否参数:Board_NO:0-3,板号PowerFlag:1-4S型加速度(1,2,3,4)指数,1=直线形加速度。系统缺省值:2返回码:0成功(<0)不成功参考函数:LM_SetACCDec_9030§3.12.3.3LM_Start_9030启动插补引擎,插补开始函数编号:41函数原型:C:shortAPIENTRYLM_Start_9030(unsignedshortBoard_NO,shortObligeFlag);解释:120\n在用户写入一定数量的插补命令后,可调用该函数让插补引擎开始工作。在插补引擎正在运行当中是否可调用:是参数:Board_NO:卡号,可能值0,1,2,3ObligeFlag:强制运行插补命令标志。0=不强制;1=强制。根据第§2.5.7插补疑问节所介绍内容,当用户写入1或2行短线段插补命令时,可在随后的LM_Start_9030命令中将该参数置为1,强制运行插补命令。返回码:(0)成功(-1)不成功参考函数:LM_Line_9030LM_ArcCW_9030LM_End_9030§3.12.3.4LM_CleanBuff_9030清空插补命令缓冲区函数编号:46函数原型:C:shortAPIENTRYLM_CleanBuff_9030(unsignedshortBoard_NO);解释:这个函数将清空插补命令缓冲区。在插补引擎正在运行当中是否可调用:否参数:Board_NO:0-3,板号121\n返回码:(0)成功(-1)不成功参考函数:§3.12.3.5LM_GetBuffLen_9030获得插补命令缓冲区空闲长度函数编号:55函数原型:C:shortAPIENTRYLM_GetBuffLen_9030(unsignedshortBoard_NO);解释:这个函数将返回插补缓冲区的空闲长度。控制卡有4096行命令缓冲区。调用该函数还有附加功能,详细说明请看第§2.5.7插补疑问节所介绍内容。在插补引擎正在运行当中是否可调用:是参数:返回码:0-4096成功,插补缓存长度(-1)不成功参考函数:§3.12.3.6LM_SetMinVel_9030设置插补最小速度122\n函数编号:47函数原型:C:shortAPIENTRYLM_SetMinVel_9030(unsignedshortBoard_NO,doubleMinLineVel,doubleMinArcVel);解释:在插补引擎正在运行当中是否可调用:否参数:Board_NO:0-3,板号MinLineVel:直线最小插补速度,单位:用户单位/分钟,缺省值:30MinArcVel:圆弧最小插补速度,单位:用户单位/分钟,缺省值:30返回码:(0)成功(-1)不成功参考函数:LM_SetMaxVel_9030§3.12.3.7LM_SetMaxVel_9030设置插补最大速度函数编号:57函数原型:C:shortAPIENTRYLM_SetMaxVel_9030(unsignedshortBoard_NO,doubleMaxLineVel,doubleMaxArcVel);解释:在插补引擎正在运行当中是否可调用:否123\n参数:Board_NO:0-3,板号MaxLineVel:直线最大插补速度,单位:用户单位/分钟,缺省值:40000MaxArcVel:圆弧最大插补速度,单位:用户单位/分钟,缺省值:40000返回码:(0)成功(-1)不成功参考函数:LM_SetMinVel_9030§3.12.3.8LM_SetParaAngle_9030设置插补引擎的角度参数函数编号:48函数原型:C:shortAPIENTRYLM_SetParaAngle_9030(unsignedshortBoard_NO,shortangle1,shortangle2);解释:该函数将设置插补引擎内部参数。这些参数将影响两两直线插补线段之间的运动平滑性。具体含义请看第§2.5.7插补疑问(4)两线段之间如何进行插补速度衔接节所介绍的内容。在插补引擎正在运行当中是否可调用:否参数:Board_NO:0-3,板号ang1::值范围:0-90,且ang1查看更多