2009年12月14日星期一

SIEMENS 840D刀具管理参数与变量的应用(优秀论文)

SIEMENS 840D刀具管理参数与变量的应用

刀具管理是加工中心维改过程中经常用到的重要功能,本文就其机床参数的含义与设置、刀具管理有关的系统变量的含义与应用进行详细地阐述。

 

SIEMENS 840D数控系统可选配刀具管理功能,它具有刀具装载、卸载、重新定位、刀具数据管理、刀具类型管理以及刀位搜索等功能,提供刀具管理数据修改功能FC块和后台数据块作为PLC接口,根据刀库结构形式来组态,灵活方便、功能强大,可适用于转塔式、链式、抽屉式以及多种特殊结构的刀库。

换刀、换附件通过NC编程与PLC编程相结合来实现,NC程序控制相应的轴定位,一定的步骤完成即通知PLC修改刀具管理数据,使其与实际状态始终保持一致。由于刀库有关数控轴通常分配在第2通道,NC编程时需注意两个通道之间的程序协调。如果将刀库有关的轴改变为PLC轴,则可以通过PLC程序来控制轴移动,为方便调试及点动操作,可设置单键切换回NC轴。

由于篇幅所限,本文仅就刀具管理功能有关的机床参数和系统变量进行阐述。

1.             机床参数

MD18080:MM_TOOL_MANAGEMENT_MASK,刀具管理内存(SRAM)区间设定。该参数为双字(DWORD)数据格式,其中位0~9有定义,分别设定不同的数据区是否有效。

MD18082:MM_NUM_TOOL,NCK能够管理的最大刀具数量。该参数取值范围为0~600,默认值为30,其设定值应大于或等于实际刀具总数。

MD18084:MM_NUM_MAGAZINE,NCK管理的刀库数量。该参数取值范围为0~32,默认值为3,刀库数量应包括虚拟刀库、系统内部定义的缓冲区(9998)和装载点(9999)。

MD18086:MM_NUM_MAGAZINE_LOCATION,NCK管理的刀位数量。该参数取值范围为0~600,默认值为30,其设定值应大于或等于实际刀位总数。

MD18088:MM_NUM_TOOL_CARRIER,可定义的最大刀架数量。该参数取值范围为0~99999999,默认值为0,如果应用刀架运动实现刀具补偿,则该参数值应大于或等于1。

MD18090:MM_NUM_CC_MAGAZINE_PARAM,OEM自定义的刀库描述数据数量。

MD18091:MM_TYPE_CC_MAGAZINE_PARAM[0…9],OEM自定义的刀库描述数据类型,MD18091[0]~[9]分别对应MD18090中规定的最多10个自定义数据的类型。

MD18092:MM_NUM_CC_MAGLOC_PARAM,OEM自定义的刀位描述数据数量。

MD18093:MM_TYPE_CC_MAGLOC_PARAM[0…9],OEM自定义的刀位描述数据类型,MD18093[0]~[9]分别对应MD18092中规定的最多10个自定义数据的类型。

MD18094:MM_NUM_CC_TDA_PARAM,OEM自定义的刀具描述数据数量。

MD18095:MM_TYPE_CC_TDA_PARAM[0…9],OEM自定义的刀具描述数据类型,MD18095[0]~[9]分别对应MD18094中规定的最多10个自定义数据的类型。

MD18096:MM_NUM_CC_TOA_PARAM,OEM自定义的刀沿描述数据数量。

MD18097:MM_TYPE_CC_TOA_PARAM[0…9],OEM自定义的刀沿描述数据类型,MD18097[0]~[9]分别对应MD18096中规定的最多10个自定义数据的类型。

MD18098:MM_ NUM_CC_MON_PARAM,OEM自定义的刀沿监控数据数量。

MD18099:MM_TYPE_CC_MON_PARAM[0…9],OEM自定义的刀沿监控数据类型,MD18099[0]~[9]分别对应MD18098中规定的最多10个自定义数据的类型。

MD18100:MM_NUM_CUTTING_EDGES_IN_TOA,每个TOA域中最大刀沿数量。

MD18105:MM_MAX_CUTTING_EDGE_NO,刀沿号的最大值。该参数取值范围为1~32000,默认值为9,其设定值应大于或等于MD18106值。

MD18106:MM_MAX_CUTTING_EDGE_PERTOOL,每把刀的最大刀沿数量。该参数取值范围为1~12,默认值为9,其设定值以满足实际应用即可。

MD10715:M_NO_FCT_CYCLE,调用换刀循环的M功能代码。该参数定义了每一个M功能代码调用一个对应MD10716中的循环运行。该参数默认值为-1(即无M功能代码生效)。

MD10716:M_NO_FCT_CYCLE_NAME,M功能调用的换刀循环名称。

MD10717:T_NO_FCT_CYCLE_NAME,T功能调用的刀具准备循环名称。

MD20310:MC_TOOL_MANAGEMENT_MASK,激活不同类型的刀具管理功能。该参数为双字(DWORD)数据格式,其中位0~23有定义,分别定义刀具管理功能的各种特性。

MD20320:MC_TOOL_TIME_MONITOR_MASK,激活刀具寿命(刀具在主轴x中使用的时间)监控。该参数数据格式位双字(DWORD),从低位到高位,状态“1”分别对应激活刀具在主轴1~主轴x中的时间监控。

MD22550:MC_TOOL_CHANGE_MODE,新刀具补偿生效的时间。该参数取值范围为0~1,默认值为0。

MD22560:MC_ TOOL_CHANGE_M_MODE,定义换刀M功能代码。该参数取值范围为0~99999999,默认值为6。

MD28085:MM_LINK_TOA_UNIT,指定TOA单元到通道,将组态号的TOA分配到目标通道中。

MD20110:MC_RESET_MODE_MASK,定义系统复位时各种功能与设置的状态。该参数为双字(DWORD)数据格式,其中位0~17有定义,分别定义复位时各种功能的状态。

MD20112:MC_START_MODE_MASK,定义程序启动时各种功能与设置的状态。该参数为双字(DWORD)数据格式,其中位0~17有定义,分别定义程序启动时各种功能的状态。

2.             系统变量

2.1 刀库数据

刀库数据包括刀库描述数据、刀位描述数据、刀位类型层次数据和换刀距离数据等。

$TC_MAP1[刀库号]:刀库类型。数据类型INT,预置值为0。1——链式,3——转塔式,5——抽屉式,7——缓冲区,9——装载点。

$TC_MAP2[刀库号]:刀库名称。数据类型STRING,预置值为空字符(“”)。

$TC_MAP3[刀库号]:刀库状态。数据类型INT,预置值为2。

$TC_MAP4[刀库号]:暂不可用。数据类型INT,预置值为-1。

$TC_MAP5[刀库号]:暂不可用。数据类型INT,预置值为-1。

$TC_MAP6[刀库号]:刀库列数。数据类型INT,预置值为1。

$TC_MAP7[刀库号]:刀库每列刀位数。数据类型INT,预置值为0。

$TC_MAP8[刀库号]:换刀位置时默认刀库位置。数据类型INT,预置值为0。

$TC_MAP9[刀库号]:默认磨损组号。数据类型INT,预置值为0。

$TC_MAP10[刀库号]:数据类型INT,预置值为0。其中位0~7:默认刀具搜索策略,位8~15:空刀位搜索策略。

$TC_MPP1[刀库号,刀位号]:刀位种类。数据类型INT,预置值为0。1——刀库刀位,2——主轴/刀座,3——手爪,4——装载位,5——传送位,6——装载站,7——装载点。

$TC_MPP2[刀库号,刀位号]:刀位类型。数据类型INT,预置值为9999。

$TC_MPP3[刀库号,刀位号]:是否考虑相邻位置。数据类型BOOL,预置值为“0”。“1”(TRUE)——考虑相邻位置,“0”(FALSE)——不考虑相邻位置。

$TC_MPP4[刀库号,刀位号]:刀位状态。数据类型INT,预置值为1。

$TC_MPP5[刀库号,刀位号]:刀位种类索引形式。数据类型INT,预置值为0。

$TC_MPP6[刀库号,刀位号]:在该刀位中的刀具刀号。数据类型INT,预置值为0,若无刀具则返回值0。

$TC_MPP7[刀库号,刀位号]:该刀位刀具适配器号。数据类型INT,预置值为0,若无刀具适配器则返回值0。

$TC_MAPC1~10[刀库号]:根据OEM定义。数据类型INT,预置值为0。根据MD18090参数定义该数据的有效数量。

$TC_MPPC1~10[刀库号,刀位号]:根据OEM定义。数据类型INT,预置值为0。根据MD18092参数定义该数据的有效数量。

$TC_MPTH[层次号n,刀位类型m]:刀位类型层次。数据类型WORD,预置值为9999。

$TC_MDP1[刀库号n,装载点号m]:刀库n的换刀位置到装载点库(9999)相应的装载点m的距离。数据类型INT,预置值为0。

$TC_MDP2[刀库号n,缓冲区刀位号m]:刀库n的换刀位置到缓冲区库(9998)相应的缓冲刀位m的距离。数据类型INT,预置值为0。

2.2 刀具数据

刀具数据包括刀具特性数据、磨削刀具数据、OEM刀具特性数据等。

$TC_TP1[刀具号]:Duplo号。数据类型INT,预置值为刀具号。

$TC_TP2[刀具号]:刀具名称。数据类型STRING,预置值为“刀具号”。

$TC_TP3[刀具号]:刀具中心线左侧占用的半刀位数。数据类型INT,预置值为1。

$TC_TP4[刀具号]:刀具中心线右侧占用的半刀位数。数据类型INT,预置值为1。

$TC_TP5[刀具号]:刀具中心线顶部占用的半刀位数。数据类型INT,预置值为1。

$TC_TP6[刀具号]:刀具中心线底部占用的半刀位数。数据类型INT,预置值为1。

$TC_TP7[刀具号]:刀具需占用的刀位类型。数据类型INT,预置值为9999。

$TC_TP8[刀具号]:刀具状态。数据类型INT,预置值为0。例如$TC_TP8[21]=18表示21#刀具有效但已达到预警限制值。

$TC_TP9[刀具号]:刀具监控方式。数据类型INT,预置值为0。例如$TC_TP8[15]=5表示15#刀具寿命监控和磨损监控有效。

$TC_TP10[刀具号]:换刀策略。数据类型INT,预置值为0。

$TC_TP11[刀具号]:刀具组(子组)。数据类型INT,预置值为0。例如$TC_TP11[5]=4表示5#刀具属于04刀具组。

$A_TOOLMN[刀具号]:刀具当前所在的刀库号。数据类型INT,预置值为0。

$A_TOOLMLN[刀具号]:刀具当前所在的刀位号。数据类型INT,预置值为0。

$P_TOOLND[刀具号]:刀具刀沿数量。数据类型INT,预置值为0。

$A_MYMN[刀具号]:所有者刀库号。数据类型INT,预置值为0。

$A_MYMLN[刀具号]:所有者刀位号。数据类型INT,预置值为0。

$TC_TPC1~10[刀具号]:根据OEM定义。数据类型REAL,预置值为0。根据MD18094参数定义该数据的有效数量。

2.3 刀沿数据

刀沿数据包括刀沿描述数据、刀沿监控数据、OEM刀沿数据等。

$TC_DP1[刀具号,刀沿号]:刀具类型(如155表示万能铣刀,120表示立铣刀)。数据类型INT,预置值为9999。

$TC_DP2[刀具号,刀沿号]:刀沿方向。数据类型REAL,预置值为0。

$TC_DP3[刀具号,刀沿号]:几何尺寸:长度1。数据类型REAL,预置值为0。

$TC_DP4[刀具号,刀沿号]:几何尺寸:长度2。数据类型REAL,预置值为0。

$TC_DP5[刀具号,刀沿号]:几何尺寸:长度3。数据类型REAL,预置值为0。

$TC_DP6[刀具号,刀沿号]:几何尺寸:半径。数据类型REAL,预置值为0。

$TC_DP7[刀具号,刀沿号]:开槽锯(刀具类型700)几何尺寸:圆弧半径。数据类型REAL,预置值为0。

$TC_DP8[刀具号,刀沿号]:开槽锯(刀具类型700)几何尺寸:长度4。数据类型REAL,预置值为0。

$TC_DP9[刀具号,刀沿号]:为几何尺寸:长度5保留。数据类型REAL,预置值为0。

$TC_DP10[刀具号,刀沿号]:刀具面与环形圆纹曲面之间的角度1。数据类型REAL,预置值为0。

$TC_DP11[刀具号,刀沿号]:刀具纵向轴与环形圆纹曲面上端之间的角度2。数据类型REAL,预置值为0。

$TC_DP12[刀具号,刀沿号]:刀沿磨损:长度1。数据类型REAL,预置值为0。

$TC_DP13[刀具号,刀沿号]:刀沿磨损:长度2。数据类型REAL,预置值为0。

$TC_DP14[刀具号,刀沿号]:刀沿磨损:长度3。数据类型REAL,预置值为0。

$TC_DP15[刀具号,刀沿号]:刀沿磨损:半径。数据类型REAL,预置值为0。

$TC_DP16[刀具号,刀沿号]:开槽锯刀沿磨损:圆弧半径。数据类型REAL,预置值为0。

$TC_DP17[刀具号,刀沿号]:开槽锯刀沿磨损:长度4。数据类型REAL,预置值为0。

$TC_DP18[刀具号,刀沿号]:为刀沿磨损:长度5保留。数据类型REAL,预置值为0。

$TC_DP19[刀具号,刀沿号]:刀沿磨损:刀具面与环形圆纹曲面之间的角度1。数据类型REAL,预置值为0。

$TC_DP20[刀具号,刀沿号]:刀沿磨损:刀具纵向轴与环形圆纹曲面上端之间的角度2。数据类型REAL,预置值为0。

$TC_DP21[刀具号,刀沿号]:刀座/适配器尺寸:长度1。数据类型REAL,预置值为0。

$TC_DP22[刀具号,刀沿号]:刀座/适配器尺寸:长度2。数据类型REAL,预置值为0。

$TC_DP23[刀具号,刀沿号]:刀座/适配器尺寸:长度3。数据类型REAL,预置值为0。

$TC_DP24[刀具号,刀沿号]:间隙角。数据类型REAL,预置值为0。

$TC_DP25[刀具号,刀沿号]:保留。数据类型REAL,预置值为0。

$TC_MOP1[刀具号,刀沿号]:刀具寿命的预警限值。数据类型REAL,预置值为0,单位:分钟。

$TC_MOP2[刀具号,刀沿号]:刀具寿命监控的当前值(刀具实际已用过的时间)。数据类型REAL,预置值为0,单位:分钟。

$TC_MOP3[刀具号,刀沿号]:工件数量预警限值。数据类型INT,预置值为0,单位:件。

$TC_MOP4[刀具号,刀沿号]:工件计数监控的当前值(刀具实际已加工的工件数量)。数据类型INT,预置值为0,单位:件。

$TC_MOP5[刀具号,刀沿号]:刀沿磨损预警限值。数据类型REAL,预置值为0,单位:mm。

$TC_MOP6[刀具号,刀沿号]:刀沿磨损实际值。数据类型REAL,预置值为0,单位:mm。

$TC_MOP11[刀具号,刀沿号]:刀具寿命监控的设定值。数据类型REAL,预置值为0,单位:分钟。

$TC_MOP13[刀具号,刀沿号]:工件数量监控的设定值。数据类型INT,预置值为0,单位:件。

$TC_MOP15[刀具号,刀沿号]:刀沿磨损监控的设定值。数据类型REAL,预置值为0,单位:mm。

$TC_DPC1~10[刀具号,刀沿号]:根据OEM定义。数据类型REAL,预置值为0。根据MD18096参数定义该数据的有效数量。

$TC_MOPC1~10[刀具号,刀沿号]:根据OEM定义。数据类型INT,预置值为0。根据MD18098参数定义该数据的有效数量。

2009年12月5日星期六

[收藏]FANUC 0i模拟主轴相关问题

  FANUC 0i模拟主轴相关问题

问1:什么是数字主轴?什么是模拟主轴?什么是串行主轴?

答1:首先了解一下主轴的类型,如下图:

主轴伺服系统可分为直流和交流两大类,由于现在大多数机床采用交流主轴伺服系统,在这里也仅介绍交流系统。交流主轴伺服系统由模拟式和数字式两种产品。

fanuc系统主轴控制可分为主轴串行输出/主轴模拟输出(Spindle serial output/Spindle analog output)。

特别的,这两种接口Fanuc 0i都具备,主轴串行输出接口能够控制两个串行主轴,主轴模拟输出接口只能控制一个模拟主轴。。

按串行方式传送数据(CNC给主轴电动机的指令)的接口称为串行输出;

另一种是输出模拟电压(电流)量作为主轴电动机指令的接口。前一种必须使用FANUC的主轴驱动单元和电动机,后一种用模拟量控制的主轴驱动单元(变频器)和电动机。所以就有了串行主轴模拟主轴的称法,串行主轴数字主轴是按不同的分类标准得出的名称,个人认为串行主轴是数字主轴的一个子集。

目前大部分的经济型机床均采用数控系统模拟量输出+变频器+感应(异步)电机的形式,性价比很高,这时也可以将模拟主轴称为变频主轴。
 

Fanuc 0i主轴连接示意图

 

问2:我用的是OI-MC的数控系统,XYZ三轴加1模拟主轴,模拟主轴由变频器控制,我现在只连接了0-10V的模拟信号端,有几点问题请教高手:

1.请问模拟主轴的正反转怎样控制?
2.我的模拟主轴每次开机第一次启动时,执行S500时程序不往下执行,总要先按下RESET键后再按下启动按钮才可以,再一次 启动程序时就不会再有这样的现象,请问这个现象怎样解除?请高手指点非常感谢!

答2:

1.FANUC 0i的模拟主轴设置和siemens802s/c的模拟主轴设置基本类似,也可以分为单极性主轴和双极性主轴。

1)双极性主轴使用0~±10Vdc模拟量输出,即控制了转速和也控制了方向(正电压定义一个方向,负电压为其反方向)。使能信号控制起停。

首先,通过CNC主轴参数3706#6、#7设置极性

其次,通过变频器参数选择频率控制输入信号的类型,以FUJI FRENIC-Multi为例,设置F01为1.

F01,C30 分别是 频率设定1,频率设定2

选择频率设定的设定方法。

  • 通过端子 12 输入两极(DC0~±10V)的模拟电压时,请将功能代码 C35 设置为0。C35 的数据为 1 时仅 DC0~+10V 有效,负极输入 DC0~-10V 视为 0(零)V。
  • 端子 C1 通过接口印刷电路板上的开关 SW7 和功能代码 E5 的设定,可作为电流输入(C1 功能)或电压输入(V2 功能)使用。
  • 除了本设定以外,还有优先级较高的设定手段(通信、多段频率等)。有关详情,请参照「FRENIC-Multi 用户手册」。

提示:通过分配到数字式输入端子中的频率设定 2 和 1 的切换功能实现『Hz2/Hz1』频率设定1(F01)和频率设定2(C30)的切换。(􀀉:功能代码 E01~E05)

最后编好相应的PMC程序进行调试(学习如何编制FANUC PMC)。

2)单极性主轴使用0~+10Vdc模拟量输出来控制转速,PMC拿出两个输出点来控制正反转。

连接示意图

注:CB105的X8.3为变频器报警输入接口。

-----------------------------------------------

2.对于第二个问题,很可能是由于没有给出速度到达信号(SAR信号。可以从变频器的输出口给系统一个信号。FRENIC-Multi可使用Y1/Y2。

下表列出了相关的主轴控制单元直接控制的不同点

 

用于主轴串行输出接口的主轴控制单元

用于主轴模拟输出接口的

主轴控制单元

主轴控制单元的参数

作为CNC 的参数指定(4000~4351/ S1,S2)传送到主轴控制单元后使用

由主轴控制单元直接指定

主轴控制单元的控制信号

通过CNC 连接到PM

CG0070~G0073 和

F0045~F0048:

第一主轴的地址

G0074~G0077 和

F0049~F0052:

第二主轴的地址

通过外部接点连接到PMC

主轴速度指令接口

0~±最高主轴电机速度

范围内的数字数据

0~±10V 的模拟电压(不包括偏移电压的调整部分)

位置编码器接口

通过主轴控制单元连接到CNC

直接连接到CNC

串行主轴的主轴控制单元信号

信号:

 

<G0070G0073>(输入)<F0045F0048>(输出)

→用于第1 串行主轴

<G0074G0077>(输入)<F0049F0052>(输出)

→用于第2 串行主轴

这些地址是CNC 侧的地址。但实际上,它们是串行主轴的主轴控制单元的输入/输出信号。

这些信号的解释,参看串行主轴说明书:

FANUC 伺服放大器 αi 系列规格说明书(B-65282EN

FANUC AC 主轴电机αi 系列规格说明书(B-65272EN

FANUC AC 主轴电机αi 系列参数说明书(B-65280EN

-----------------------------------------

什么是速度到达信号(SAR)?

主轴速度到达信号SARCNC启动切削进给的输入信号。

该信号通常用于切削进给必须在主轴达到指定速度后方能启动的场合。

此时,用传感器检测主轴速度。所检测的速度通过PMC 送至CNC

当用梯形图连续执行以上操作时,如果主轴速度改变指令和切削进给指令同时发出时,则CNC 系统会根据表示以前主轴状态(主轴速度改变前)的信号SAR,错误启动切削进给。为避免上述问题,在发出S指令和切削进给指令后,对SAR 信号进行延时监测。延迟时间由参数No.3740 设定。

使用SAR 信号时,需将参数No.3708 0 位(SAR)设定为1

当该功能使切削进给处于停止状态时,诊断画面上的No.06(主轴速度到达检测)保持为1

【收藏】FANUC 0i-B系统主轴的参数设定

FANUC 0i-B系统主轴的参数设定

1、Fanuc主轴伺服系统简介
要正确地进行横速变成和操作,首要弄清数控车床的主轴工作原理和结构。
Fanuc公司的主轴伺服系统可分为直流和交流两大类,由于现在大多数机床采用交流主轴伺服系统,在这里也仅介绍交流系统。交流主轴伺服系统由模拟式和数字式两种产品,它有以下特点:

①由于采用了微处理器和最新的电气技术,在全部速度范围内能平滑的运行以及很少的振动和噪声;

②具有再生制动控制,可将电动机能量反馈回电网。

而数字式伺服系统较之模拟伺服系统由具有二个特点:

①由于采用数字直接控制,数控系统输出不要经过A/D转换,所以控制精度高;

②取消全部电位器,采用参数设定方法,其优点是设定灵活,范围广,而且可以无级设定,所以较电位器调整准确。
对主轴伺服系统的过程简述如下(如图1):

图1

交流主轴伺服系统有数控系统来的速度指令在比较起中与检测器来的信号相与之后,经比例积分回路将速度误差信号放大作为转矩指令电压输出,再经绝对值回路使转矩指令电压永远为正。然后经函数发生器(起作用位当电动机低速时提高转矩指令电压)到达V/F变换器,变成误差脉冲。误差脉冲送到微处理器并与四倍回路出来的速度反馈脉冲进行运算。同时,将预先写在微处理器部件中的ROM中的信息独处分别送出振幅和相位信号,送到DA振幅器和DA强励磁。DA振幅其用于产生于转矩指令相对应的电动机定子电流的振幅,DA励磁强化回路用于控制增加定子电流的振幅。它们的输出值经乘法器后形成定子电流的振幅。
另一方面,从微处理器输出的U、V两相的相位(即sinθ、 sin(θ-120°))被分别送到U、V相的电流指令回路(实际为一乘法器),通过它形成U、V相的电流指令。这个指令与电流反馈信号相与之后的误差, 经过放大之后送PWM控制回路,变成频率为3kHz的脉宽信号。而W相的信号则是由Iu、Iv两信号合成产生。上述脉宽信号经PWM变换器,用脉宽调制信 号控制电动机的三相交流电流。脉冲发生器是一个速度监测器,用来产生每转256个脉冲的正弦、余弦信号波形,经过4倍回路变成每转1024个脉冲。它一方 面送到微处理器,另一方面经F/V变换器作为速度反馈送到比较起与速度指令去进行比较。但在低速时,由于F/V变换器的线性度较差,所以此时的速度反馈信 号时由微分电路和同步电路产生的。
2、主轴的一般设定
为保证主轴电机能正常工作,能提供良好的旋转力矩,因而对主轴电机的转速有上、下限的制约。如图2。

参数 NO.3735设定主轴电机最低箝制速度,参数 NO.3736设定主轴电机最高箝制速度,设定数据的范围为:0~4095。设定值由以下公式求得:

图2

但是,主轴电机箝制速度的设定并不是一直有效的,如果指定了恒表面速度控制功能或GTT(NO.3706.#4),这两个参数无效。在这种情况下,不能指定主轴电机的最大箝制速度。但是可以由参数NO.3772(第一轴)、NO.3802(第二轴)、NO.3822(第三轴)设定主轴最大速度。
现在的数控机床一般采用手动换档和自动换档两种方式,前一种方式是在主轴停止后,根据所需要的主轴速度人工拨动机械档位至相应的速度范围;后者,首先执行S功能,检查所设定的主轴转速,然后根据所在的速度范围发出信号,一般采用液压方式换到相应的档位。
所以在程序当中或使用MDI方式,S功能应该写在M3(M4)之前,在某些严格要求的场合,S指令要写在M3(M4)的前一行,使机床能够先判断、切换档位后启动主轴。对手动换档机床,当S功能设定的主轴速度和所在档位不一致时,M3(M4)若写在S功能前,可以看到主轴首先转动,然后立即停止,再报警的情况,这对机床有一定的伤害。因此,应注意书写格式。
对每一个档位,都需要设置它的主轴最高转速,这是由参数 NO.3741 、NO.3742、NO.3743和NO.3744(齿轮档1、2、3和4的主轴最高转速)所设定的,它们的数据单位是min-1,数据范围:0~32767。显然,参数的设置是和实际机床的齿轮变比有关系,当选定了齿轮组后,相应的参数也就能够设定了。如果M系选择了T型齿轮换档(恒表面速度控制或参数GTT(NO.3706#4)设定为1),还必须设定参数NO.3744。即使如此,刚性攻丝也只能用3档速度。如图3。


图3

档位的选择,由参数 NO.3751(档1~档2切换点的主轴电机速度)、参数 NO.3752(档2~档3切换点的主轴电机速度)决定,其数据范围:0~4095,其设定值为:

这两个参数的设定要考虑到主轴电机转速和扭矩。
另外,要注意在攻丝循环时的档位切换有专用的参数:参数 NO.3761(攻丝循环时档1~档2切换点的主轴电机速度)、参数 NO.3762(攻丝循环时档1~档2切换点的主轴电机速度),其数据单位:rpm,数据范围:0~32767。而不由参数 NO.3751、 NO.3752决定。
3、恒表面速度的相关参数设定
恒表面速度指令G96是模态G代码,在指令G96指令后,程序进入恒表面速度控制方式且以指定S值为表面速度。G96指令必须指定恒表面切削速度控制应用哪个轴。参数 NO.3770可设定恒表面速度控制时作为计算基准的轴(数据范围:1,2,3……控制的轴号,如设定为0时,认为X轴进行恒表面速度控制)。此时G96程序段中指令的P值对恒表面速度控制没有意义。直至G97取消G96方式。
主轴转速(角速度)和表面速度之间存在如下关系:

其中v:线速度;ω:角速度;r:半径;n:转速。

由上式可知,随着半径的变化,表面速度几乎可以为从0至无穷大的值,这在实际加工是不允许出现的。因此在用恒表面切削速度控制时,主轴速度若高于G50S_____中规定的值,就被箝在最大主轴速度;若通电时尚未指定最大主轴速度,则主轴速度不被箝制。在G96程序段的S(表面速度)指令被当作S=0,直到程序中出现M3或M4。
而在实际加工中,我们通常要对恒表面速度的上下都要设限,参数 NO.3771和 NO.3772分别对在恒表面速度控制时主轴最低、最高转速进行设定(数据单位:rpm。数据范围:0~32767)。而如果在多主轴控制时(T系),用下列参数NO.3781(设定第1主轴的上下转速)、NO. 3782(设定第2主轴的上下转速)、NO. 3783(设定第3主轴的上下转速)的上限转速。
在利用恒表面速度进行实际加工时,很多操作者反映加工后的表面效果并不理想,远不及预期的,甚至有些还比一般加工的效果还要差。
这 其实是由机床操作者对主轴的一些参数设定值和恒表面速度加工特性不甚了解所造成的。一定进入了恒表面加工状态,即使对自动换档的机床来说档位也被锁定。也 就是说,即使主轴的转速值跨越了档位切换点,系统也不会进行换档。而一旦设定不合理,主轴处于不合适的档位,无法提供足够的切削旋转扭矩,便会明显地影响 加工效果。因此,在进行恒表面速度加工之前,应对被加工表面进行分析,求出在所需的表面速度下各处相对应的主轴转速的相对集中段,以确定合适的档位。然后 再设定恒表面速度的上下限,保证主轴转速在最佳的范围内。
而对自动换档系统,在编制加工程序时应注意,在进入恒表面速度加工前,应使用S指令将主轴切换到所需的档位,然后再进行恒表面速度加工。
4、结束语
数控加工过程中所涉及的知识面很广,不仅包含着一般的加工工艺、金属切削等方面的知识,还需要对数控机床本身有一定的了解,只有将机床参数设置为最佳状态值,才能够达到预期的、满足的加工效果。

2009年11月24日星期二

Siemens 840D悬垂补偿,如何补双向

Siemens 840D悬垂补偿,如何补双向

摘要:西门子840D数控系统不同于以前曾广泛应用的810T/M和840C等老数控系统,它并

没有提供专门的双向螺距误差补偿功能,通过对840D系统中的下垂补偿功能的分析研

究,找到了一种方法,成功的解决了进行双向螺距误差补偿的问题。

关键词:数控系统 下垂补偿功能 双向螺距误差补偿

由于机床丝杠在制造、安装和调整等方面的误差,以及磨损等原因,造成机械正反向

传动误差的不一致,导致零件加工精度误差不稳定。因此也必须定期对机床坐标精度

进行补偿,必要时要做双向坐标补偿,以达到坐标正反向运动误差的一致性。

一、西门子840D数控系统的补偿功能

西门子840D数控系统提供了多种补偿功能,供机床精度调整时选用。这些功能

有:

1、温度补偿。

2、反向间隙补偿。

3、插补补偿,分为:

(1) 螺距误差和测量系统误差补偿。

(2)下垂补偿(横梁下垂和工作台倾斜的多维交叉误差补偿)。

4、动态前馈控制(又称跟随误差补偿)。包括:速度前馈控制和扭矩前馈控制。

5、象限误差补偿(又称摩擦力补偿)。分为:常规(静态) 象限误差补偿和神经网络

(动态)象限误差补偿。

6、漂移补偿。

7、电子重量平衡补偿。

在西门子840D功能说明样本和资料中所列的众多补偿功能中,都没有指出该系统

具有双向螺距误差补偿功能。但是在下垂补偿功能描述中却指出,下垂补偿功能具有

方向性。这样,如果下垂误差补偿功能,在基准轴和补偿轴定义为同一根轴时,就可

能对该轴进行双向丝杠螺距误差补偿,由此提供了一个双向螺距误差补偿的 依据。

二、840D下垂补偿功能的原理

1、下垂误差产生的原因:

由于镗铣头的重量或镗杆自身的重量,造成相关轴的位置相对于移动部件产生倾

斜,也就是说,一个轴(基准轴)由于自身的重量造成下垂,相对于另一个轴(补偿

轴)的绝对位置产生了变化。

2、840D下垂补偿功能参数的分析:

西门子840D数控系统的补偿功能,其补偿数据不是用机床数据描述,而是以参数

变量,通过零件程序形式或通用启动文件(_INI文件) 形式来表达。描述如下:

(1) $AN_CEC[t,N]:插补点N的补偿值,即基准轴的每个插补点对应于补偿轴的补偿

值变量参数。

(2) $AN_CEC_INPUT_AXIS[t]:定义基准轴的名称。

(3) $AN_CEC_OUTPUT_AXIS[t]:定义对应补偿值的轴名称。

(4) $AN_CEC_STEP[t]:基准轴两插补点之间的距离。

(5) $AN_CEC_MIN[t]:基准轴补偿起始位置:

(6) $AN_CEC_MAX[t]: 基准轴补偿终止位置

(7) $AN_CEC_DIRECTION[t]:定义基准轴补偿方向。其中:

★ $AN_CEC_DIRECTION[t]=0:补偿值在基准轴的两个方向有效。

★ $AN_CEC_DIRECTION[t]=1:补偿值只在基准轴的正方向有效,基准轴的负方向无

补偿值。

★ $AN_CEC_DIRECTION[t]=-1:补偿值只在基准轴的负方向有效,基准轴的正方向无

补偿值。

(8) $AN_CEC_IS_MODULO[t]:基准轴的补偿带模功能。

(9) $AN_CEC_MULT_BY_TABLE[t]:基准轴的补偿表的相乘表。这个功能允许任一补偿

表可与另一补偿表或该表自身相乘。

3、 下垂补偿功能用于螺距误差或测量系统误差补偿时的定义方法:

根据840D资料的描述,机床的一个轴,在同一补偿表中,既可以定义为基准轴,

又可以定义为补偿轴。当基准轴和补偿轴同为一个轴时,可以利用下垂补偿功能 对该

轴进行螺距误差或测量系统误差补偿。从补偿变量参数$AN_CEC_DIRECTION[t]的描述

中可以看出,由于下垂补偿功能补偿值具有方向性, 所以,下垂补偿功能在用于螺距

误差或测量系统误差时,可以理解为在坐标轴两个方向上可以分别给予补偿。一个表

应用于补偿轴的运行正方向,另一个表应用于补 偿同一轴的运行负方向。

三、840D下垂误差补偿功能几个关键机床数据的说明

1、NC 机床数据:

MD18342:补偿表的最大补偿点数,每个补偿表最大为2000插补补偿点数。

MD32710:激活补偿表。

MD32720:下垂补偿表在某点的补偿值总和的极限值,840DE(出口型)为1mm;840D(非

出口型)为10mm。

2、设定机床数据:

SD41300:下垂补偿赋值表有效。

SD41310:下垂补偿赋值表的加权因子。

由于这两个数据可以通过零件程序或PLC程序修改,所以一个轴由于各种因素造成的不

同条件下的不同补偿值可通过修改这两个数据来调整补偿值。

四、应用

下垂补偿功能应用于双向螺距误差补偿,其装载步骤与840D螺距误差补偿方法一

样。

例一:正向补偿文件

%_N_NC_CEC_INI

CHANDATA(1)

$AN_CEC[0,0]=0.000

$AN_CEC[0,1]=0.000

$AN_CEC[0,2]=0.000

$AN_CEC[0,3]=0.000

$AN_CEC[0,4]=0.000

$AN_CEC[0,5]=0.000

$AN_CEC[0,6]=0.000

$AN_CEC[0,7]=0.000

……

$AN_CEC[0,57]=0.000

$AN_CEC[0,58]=0.000 以上定义补偿插补点的补偿值

$AN_CEC_INPUT_AXIS[0]=(AX1) 定义基准轴

$AN_CEC_OUTPUT_AXIS[0]=(AX1) 定义补偿轴

$AN_CEC_STEP[0]=50 定义补偿步距

$AN_CEC_MIN[0]=-1450 定义补偿起点

$AN_CEC_MAX[0]=1450 定义补偿终点

$AN_CEC_DIRECTION[0]=1 定义补偿方向,正向补偿生效,负向无补偿

$AN_CEC_MULT_BY_TABLE[0]=0 定义补偿相乘表

$AN_CEC_IS_MODULO[0]=0 定义补偿表模功能

例二:负向补偿文件

%_N_NC_CEC_INI

CHANDATA(1)

$AN_CEC[1,0]=0.000

$AN_CEC[1,1]=0.000

$AN_CEC[1,2]=0.000

$AN_CEC[1,3]=0.000

$AN_CEC[1,4]=0.000

$AN_CEC[1,5]=0.000

$AN_CEC[1,6]=0.000

$AN_CEC[1,7]=0.000

……

$AN_CEC[1,57]=0.000

$AN_CEC[1,58]=0.000 以上定义补偿插补点的补偿值

$AN_CEC_INPUT_AXIS[1]=(AX1) 定义基准轴

$AN_CEC_OUTPUT_AXIS[1]=(AX1) 定义补偿轴

$AN_CEC_STEP[1]=50 定义补偿步距

$AN_CEC_MIN[1]=-1450 定义补偿起点

$AN_CEC_MAX[1]=1450 定义补偿终点

$AN_CEC_DIRECTION[1]=-1 定义补偿方向,负向补偿生效,正向无补偿

$AN_CEC_MULT_BY_TABLE[1]=0 定义补偿相乘表

$AN_CEC_IS_MODULO[1]=0 定义补偿表模功能

我们通过对840D/810D灵活多变的补偿变量的分析研究,不仅成功的进行了双向螺距误

差补偿,而且下垂补偿功能还可以应用于横梁的下垂补偿、台面的斜度补偿等方面。

SIEMENS 840D刀具管理参数与变量的应用(优秀论文)

SIEMENS 840D刀具管理参数与变量的应用(优秀论文)

摘要:刀具管理是加工中心维改过程中经常用到的重要功能,本文就其机床参数的含义与设置、刀具管理有关的系统变量的含义与应用进行详细地阐述。

 

SIEMENS 840D数控系统可选配刀具管理功能,它具有刀具装载、卸载、重新定位、刀具数据管理、刀具类型管理以及刀位搜索等功能,提供刀具管理数据修改功能FC块和后台数据块作为PLC接口,根据刀库结构形式来组态,灵活方便、功能强大,可适用于转塔式、链式、抽屉式以及多种特殊结构的刀库。

换刀、换附件通过NC编程与PLC编程相结合来实现,NC程序控制相应的轴定位,一定的步骤完成即通知PLC修改刀具管理数据,使其与实际状态始终保持一致。由于刀库有关数控轴通常分配在第2通道,NC编程时需注意两个通道之间的程序协调。如果将刀库有关的轴改变为PLC轴,则可以通过PLC程序来控制轴移动,为方便调试及点动操作,可设置单键切换回NC轴。

由于篇幅所限,本文仅就刀具管理功能有关的机床参数和系统变量进行阐述。

1.             机床参数

MD18080:MM_TOOL_MANAGEMENT_MASK,刀具管理内存(SRAM)区间设定。该参数为双字(DWORD)数据格式,其中位0~9有定义,分别设定不同的数据区是否有效。

MD18082:MM_NUM_TOOL,NCK能够管理的最大刀具数量。该参数取值范围为0~600,默认值为30,其设定值应大于或等于实际刀具总数。

MD18084:MM_NUM_MAGAZINE,NCK管理的刀库数量。该参数取值范围为0~32,默认值为3,刀库数量应包括虚拟刀库、系统内部定义的缓冲区(9998)和装载点(9999)。

MD18086:MM_NUM_MAGAZINE_LOCATION,NCK管理的刀位数量。该参数取值范围为0~600,默认值为30,其设定值应大于或等于实际刀位总数。

MD18088:MM_NUM_TOOL_CARRIER,可定义的最大刀架数量。该参数取值范围为0~99999999,默认值为0,如果应用刀架运动实现刀具补偿,则该参数值应大于或等于1。

MD18090:MM_NUM_CC_MAGAZINE_PARAM,OEM自定义的刀库描述数据数量。

MD18091:MM_TYPE_CC_MAGAZINE_PARAM[0…9],OEM自定义的刀库描述数据类型,MD18091[0]~[9]分别对应MD18090中规定的最多10个自定义数据的类型。

MD18092:MM_NUM_CC_MAGLOC_PARAM,OEM自定义的刀位描述数据数量。

MD18093:MM_TYPE_CC_MAGLOC_PARAM[0…9],OEM自定义的刀位描述数据类型,MD18093[0]~[9]分别对应MD18092中规定的最多10个自定义数据的类型。

MD18094:MM_NUM_CC_TDA_PARAM,OEM自定义的刀具描述数据数量。

MD18095:MM_TYPE_CC_TDA_PARAM[0…9],OEM自定义的刀具描述数据类型,MD18095[0]~[9]分别对应MD18094中规定的最多10个自定义数据的类型。

MD18096:MM_NUM_CC_TOA_PARAM,OEM自定义的刀沿描述数据数量。

MD18097:MM_TYPE_CC_TOA_PARAM[0…9],OEM自定义的刀沿描述数据类型,MD18097[0]~[9]分别对应MD18096中规定的最多10个自定义数据的类型。

MD18098:MM_ NUM_CC_MON_PARAM,OEM自定义的刀沿监控数据数量。

MD18099:MM_TYPE_CC_MON_PARAM[0…9],OEM自定义的刀沿监控数据类型,MD18099[0]~[9]分别对应MD18098中规定的最多10个自定义数据的类型。

MD18100:MM_NUM_CUTTING_EDGES_IN_TOA,每个TOA域中最大刀沿数量。

MD18105:MM_MAX_CUTTING_EDGE_NO,刀沿号的最大值。该参数取值范围为1~32000,默认值为9,其设定值应大于或等于MD18106值。

MD18106:MM_MAX_CUTTING_EDGE_PERTOOL,每把刀的最大刀沿数量。该参数取值范围为1~12,默认值为9,其设定值以满足实际应用即可。

MD10715:M_NO_FCT_CYCLE,调用换刀循环的M功能代码。该参数定义了每一个M功能代码调用一个对应MD10716中的循环运行。该参数默认值为-1(即无M功能代码生效)。

MD10716:M_NO_FCT_CYCLE_NAME,M功能调用的换刀循环名称。

MD10717:T_NO_FCT_CYCLE_NAME,T功能调用的刀具准备循环名称。

MD20310:MC_TOOL_MANAGEMENT_MASK,激活不同类型的刀具管理功能。该参数为双字(DWORD)数据格式,其中位0~23有定义,分别定义刀具管理功能的各种特性。

MD20320:MC_TOOL_TIME_MONITOR_MASK,激活刀具寿命(刀具在主轴x中使用的时间)监控。该参数数据格式位双字(DWORD),从低位到高位,状态“1”分别对应激活刀具在主轴1~主轴x中的时间监控。

MD22550:MC_TOOL_CHANGE_MODE,新刀具补偿生效的时间。该参数取值范围为0~1,默认值为0。

MD22560:MC_ TOOL_CHANGE_M_MODE,定义换刀M功能代码。该参数取值范围为0~99999999,默认值为6。

MD28085:MM_LINK_TOA_UNIT,指定TOA单元到通道,将组态号的TOA分配到目标通道中。

MD20110:MC_RESET_MODE_MASK,定义系统复位时各种功能与设置的状态。该参数为双字(DWORD)数据格式,其中位0~17有定义,分别定义复位时各种功能的状态。

MD20112:MC_START_MODE_MASK,定义程序启动时各种功能与设置的状态。该参数为双字(DWORD)数据格式,其中位0~17有定义,分别定义程序启动时各种功能的状态。

2.             系统变量

2.1 刀库数据

刀库数据包括刀库描述数据、刀位描述数据、刀位类型层次数据和换刀距离数据等。

$TC_MAP1[刀库号]:刀库类型。数据类型INT,预置值为0。1——链式,3——转塔式,5——抽屉式,7——缓冲区,9——装载点。

$TC_MAP2[刀库号]:刀库名称。数据类型STRING,预置值为空字符(“”)。

$TC_MAP3[刀库号]:刀库状态。数据类型INT,预置值为2。

$TC_MAP4[刀库号]:暂不可用。数据类型INT,预置值为-1。

$TC_MAP5[刀库号]:暂不可用。数据类型INT,预置值为-1。

$TC_MAP6[刀库号]:刀库列数。数据类型INT,预置值为1。

$TC_MAP7[刀库号]:刀库每列刀位数。数据类型INT,预置值为0。

$TC_MAP8[刀库号]:换刀位置时默认刀库位置。数据类型INT,预置值为0。

$TC_MAP9[刀库号]:默认磨损组号。数据类型INT,预置值为0。

$TC_MAP10[刀库号]:数据类型INT,预置值为0。其中位0~7:默认刀具搜索策略,位8~15:空刀位搜索策略。

$TC_MPP1[刀库号,刀位号]:刀位种类。数据类型INT,预置值为0。1——刀库刀位,2——主轴/刀座,3——手爪,4——装载位,5——传送位,6——装载站,7——装载点。

$TC_MPP2[刀库号,刀位号]:刀位类型。数据类型INT,预置值为9999。

$TC_MPP3[刀库号,刀位号]:是否考虑相邻位置。数据类型BOOL,预置值为“0”。“1”(TRUE)——考虑相邻位置,“0”(FALSE)——不考虑相邻位置。

$TC_MPP4[刀库号,刀位号]:刀位状态。数据类型INT,预置值为1。

$TC_MPP5[刀库号,刀位号]:刀位种类索引形式。数据类型INT,预置值为0。

$TC_MPP6[刀库号,刀位号]:在该刀位中的刀具刀号。数据类型INT,预置值为0,若无刀具则返回值0。

$TC_MPP7[刀库号,刀位号]:该刀位刀具适配器号。数据类型INT,预置值为0,若无刀具适配器则返回值0。

$TC_MAPC1~10[刀库号]:根据OEM定义。数据类型INT,预置值为0。根据MD18090参数定义该数据的有效数量。

$TC_MPPC1~10[刀库号,刀位号]:根据OEM定义。数据类型INT,预置值为0。根据MD18092参数定义该数据的有效数量。

$TC_MPTH[层次号n,刀位类型m]:刀位类型层次。数据类型WORD,预置值为9999。

$TC_MDP1[刀库号n,装载点号m]:刀库n的换刀位置到装载点库(9999)相应的装载点m的距离。数据类型INT,预置值为0。

$TC_MDP2[刀库号n,缓冲区刀位号m]:刀库n的换刀位置到缓冲区库(9998)相应的缓冲刀位m的距离。数据类型INT,预置值为0。

2.2 刀具数据

刀具数据包括刀具特性数据、磨削刀具数据、OEM刀具特性数据等。

$TC_TP1[刀具号]:Duplo号。数据类型INT,预置值为刀具号。

$TC_TP2[刀具号]:刀具名称。数据类型STRING,预置值为“刀具号”。

$TC_TP3[刀具号]:刀具中心线左侧占用的半刀位数。数据类型INT,预置值为1。

$TC_TP4[刀具号]:刀具中心线右侧占用的半刀位数。数据类型INT,预置值为1。

$TC_TP5[刀具号]:刀具中心线顶部占用的半刀位数。数据类型INT,预置值为1。

$TC_TP6[刀具号]:刀具中心线底部占用的半刀位数。数据类型INT,预置值为1。

$TC_TP7[刀具号]:刀具需占用的刀位类型。数据类型INT,预置值为9999。

$TC_TP8[刀具号]:刀具状态。数据类型INT,预置值为0。例如$TC_TP8[21]=18表示21#刀具有效但已达到预警限制值。

$TC_TP9[刀具号]:刀具监控方式。数据类型INT,预置值为0。例如$TC_TP8[15]=5表示15#刀具寿命监控和磨损监控有效。

$TC_TP10[刀具号]:换刀策略。数据类型INT,预置值为0。

$TC_TP11[刀具号]:刀具组(子组)。数据类型INT,预置值为0。例如$TC_TP11[5]=4表示5#刀具属于04刀具组。

$A_TOOLMN[刀具号]:刀具当前所在的刀库号。数据类型INT,预置值为0。

$A_TOOLMLN[刀具号]:刀具当前所在的刀位号。数据类型INT,预置值为0。

$P_TOOLND[刀具号]:刀具刀沿数量。数据类型INT,预置值为0。

$A_MYMN[刀具号]:所有者刀库号。数据类型INT,预置值为0。

$A_MYMLN[刀具号]:所有者刀位号。数据类型INT,预置值为0。

$TC_TPC1~10[刀具号]:根据OEM定义。数据类型REAL,预置值为0。根据MD18094参数定义该数据的有效数量。

2.3 刀沿数据

刀沿数据包括刀沿描述数据、刀沿监控数据、OEM刀沿数据等。

$TC_DP1[刀具号,刀沿号]:刀具类型(如155表示万能铣刀,120表示立铣刀)。数据类型INT,预置值为9999。

$TC_DP2[刀具号,刀沿号]:刀沿方向。数据类型REAL,预置值为0。

$TC_DP3[刀具号,刀沿号]:几何尺寸:长度1。数据类型REAL,预置值为0。

$TC_DP4[刀具号,刀沿号]:几何尺寸:长度2。数据类型REAL,预置值为0。

$TC_DP5[刀具号,刀沿号]:几何尺寸:长度3。数据类型REAL,预置值为0。

$TC_DP6[刀具号,刀沿号]:几何尺寸:半径。数据类型REAL,预置值为0。

$TC_DP7[刀具号,刀沿号]:开槽锯(刀具类型700)几何尺寸:圆弧半径。数据类型REAL,预置值为0。

$TC_DP8[刀具号,刀沿号]:开槽锯(刀具类型700)几何尺寸:长度4。数据类型REAL,预置值为0。

$TC_DP9[刀具号,刀沿号]:为几何尺寸:长度5保留。数据类型REAL,预置值为0。

$TC_DP10[刀具号,刀沿号]:刀具面与环形圆纹曲面之间的角度1。数据类型REAL,预置值为0。

$TC_DP11[刀具号,刀沿号]:刀具纵向轴与环形圆纹曲面上端之间的角度2。数据类型REAL,预置值为0。

$TC_DP12[刀具号,刀沿号]:刀沿磨损:长度1。数据类型REAL,预置值为0。

$TC_DP13[刀具号,刀沿号]:刀沿磨损:长度2。数据类型REAL,预置值为0。

$TC_DP14[刀具号,刀沿号]:刀沿磨损:长度3。数据类型REAL,预置值为0。

$TC_DP15[刀具号,刀沿号]:刀沿磨损:半径。数据类型REAL,预置值为0。

$TC_DP16[刀具号,刀沿号]:开槽锯刀沿磨损:圆弧半径。数据类型REAL,预置值为0。

$TC_DP17[刀具号,刀沿号]:开槽锯刀沿磨损:长度4。数据类型REAL,预置值为0。

$TC_DP18[刀具号,刀沿号]:为刀沿磨损:长度5保留。数据类型REAL,预置值为0。

$TC_DP19[刀具号,刀沿号]:刀沿磨损:刀具面与环形圆纹曲面之间的角度1。数据类型REAL,预置值为0。

$TC_DP20[刀具号,刀沿号]:刀沿磨损:刀具纵向轴与环形圆纹曲面上端之间的角度2。数据类型REAL,预置值为0。

$TC_DP21[刀具号,刀沿号]:刀座/适配器尺寸:长度1。数据类型REAL,预置值为0。

$TC_DP22[刀具号,刀沿号]:刀座/适配器尺寸:长度2。数据类型REAL,预置值为0。

$TC_DP23[刀具号,刀沿号]:刀座/适配器尺寸:长度3。数据类型REAL,预置值为0。

$TC_DP24[刀具号,刀沿号]:间隙角。数据类型REAL,预置值为0。

$TC_DP25[刀具号,刀沿号]:保留。数据类型REAL,预置值为0。

$TC_MOP1[刀具号,刀沿号]:刀具寿命的预警限值。数据类型REAL,预置值为0,单位:分钟。

$TC_MOP2[刀具号,刀沿号]:刀具寿命监控的当前值(刀具实际已用过的时间)。数据类型REAL,预置值为0,单位:分钟。

$TC_MOP3[刀具号,刀沿号]:工件数量预警限值。数据类型INT,预置值为0,单位:件。

$TC_MOP4[刀具号,刀沿号]:工件计数监控的当前值(刀具实际已加工的工件数量)。数据类型INT,预置值为0,单位:件。

$TC_MOP5[刀具号,刀沿号]:刀沿磨损预警限值。数据类型REAL,预置值为0,单位:mm。

$TC_MOP6[刀具号,刀沿号]:刀沿磨损实际值。数据类型REAL,预置值为0,单位:mm。

$TC_MOP11[刀具号,刀沿号]:刀具寿命监控的设定值。数据类型REAL,预置值为0,单位:分钟。

$TC_MOP13[刀具号,刀沿号]:工件数量监控的设定值。数据类型INT,预置值为0,单位:件。

$TC_MOP15[刀具号,刀沿号]:刀沿磨损监控的设定值。数据类型REAL,预置值为0,单位:mm。

$TC_DPC1~10[刀具号,刀沿号]:根据OEM定义。数据类型REAL,预置值为0。根据MD18096参数定义该数据的有效数量。

$TC_MOPC1~10[刀具号,刀沿号]:根据OEM定义。数据类型INT,预置值为0。根据MD18098参数定义该数据的有效数量。


Siemens 840D的CYCLE800怎么使用

Siemens 840D的CYCLE800怎么使用

用TRAORI指令,定义类型后即可实现RTCP。我们的加工中心安装时定义的运动转换类型居然不对也通过,后来我自己改的。

CYCLE800只能实现摆角后定平面加工时的刀长补。

The Swiveling cycle is not an option, but is available

with PCU 20/50, SW 06.02, and NCK SW 6.3 or later.

To use the swiveling cycle, the machine data below must be set as

follows (minimum requirement):

?  MD 10602: FRAME_GEOAX_CHANGE_MODE=1

(only when the tool is corrected using TRAORI)

?  MD 18088: MM_NUM_TOOL_CARRIER

 Number of swivel data records

?  MD 20126: TOOL_CARRIER_RESET_VALUE

 described in CYCLE800

?  MD 20180: TOCARR_ROT_ANGLE_INCR[0]=0

?  MD 20180: TOCARR_ROT_ANGLE_INCR[1]=0

? MD 20182:TOCARR_ROT_ANGLE_OFFSET[0]=0

?  MD 20182: TOCARR_ROT_ANGLE_OFFSET[1]=0

?  MD 20184: TOCARR_BASE_FRAME_NUMBER=-1

?  MD 22530: TOCARR_CHANGE_M_CODE

 M code on swivel data changeover

?  MD 24008: CHSFRAME_POWERON_MASK

bits 4, 3, 2=1 if system frames PAROT, TOROT, WPFRAME are

to be deleted on Power ON

? MD 28082:MM_SYSTEM_FRAME_MASK

bits 4, 3, 2=1

命令格式:CYCLE800(_FR, _TC, _ST, _MODE, _XO, _YO, _ZO, _A, _B, _C, _X1, _Y1, _Z1, _DIR)。

在编程时有图形界面的(如同CYCLE8x等),填空完后就可把指令插入用户程序中

Siemens 840D数控系统变量应用

Siemens 840D数控系统变量应用

前提:

以钻头为例,基于5轴H/V加工中心平台,兼容4轴H/V加工中心,840D控制系统。

介绍一个常识:不同的工作平面,轴变量所具体对应的含义。

Working - plane

$P_AXN1 $P_AXN2 $P_AXN3

G17 X Y Z

G18 Z X Y

G19 Y Z X

也就是说当使用G17的时候,$P_AXN1,$P_AXN2,$P_AXN3对应的XYZ,其他亦然。

所以,当你使用5轴H/V设备的时候,可以用变量的方式,完成"不同工作平面"的孔加工。这是使用它的目的。

$TC_DPC1[t,d]这里是钻头的半径值,类型是REAL;

$TC_DPC2[t,d]这里是钻头的钻尖角度,类型是REAL;

$P_TOOLNO是当前使用的刀号,注意:不是刀具名称!

$P_TOOL是当前使用的刀刃编号;

…… ;假设前面已经换好刀,运动到适当位置,以下程序和使用G17,G18,G19没有关系。

N0010 DEF AXIS AXIS_Z ;这是定义一个轴变量,在以后使用的时候引用,这也是钻孔的运动方向。

N0020 DEF REAL ZT_JIAODU,ZT_BANJING,ZT_ZJC

N0030 ZT_JIAODU=$TC_DPC2[$P_TOOLNO,$P_TOOL]

N0040 ZT_BANJING=$TC_DPC1[$P_TOOLNO,$P_TOOL]

N0050 IF ZT_JIAODU==180

N0060 ZT_ZJC=0 ;钻尖长度为零

N0070 ELSE

N0080 ZT_ZJC=(ZT_BANJING/TAN(ZT_JIAODU/2));注意,使用时,事先要先在定义刀具的时候,定义钻尖的角度,如果是平底钻,就定义成180

N0090 ENDIF

N0100 AXIS_Z=$P_AXN3

N0110 G0 G90 AX[AXIS_Z]=??? ;???是你需要走到的孔的位置

N0120 G1 AX[AXIS_Z]=?? ;??是你需要的孔深,如果不算钻尖,就需要减去ZT_ZJC就行可。

N0130 G0 AX[AXIS_Z]=? ;?退出的距离,离开工件表面就行了。

……

以上就是我们想到达的目的了。

2009年10月22日星期四

【收藏】S7-200模拟量换算

S7-200模拟量换算

模拟量比例换算

因为A/D(模/数)、(D/A)数/模转换之间的对应关系,S7-200 CPU内部用数值表示外部的模拟量信号,两者之间有一定的数学关系。这个关系就是模拟量/数值量的换算关系。

例如,使用一个0 - 20mA的模拟量信号输入,在S7-200 CPU内部,0 - 20mA对应于数值范围0 - 32000;对于4 - 20mA的信号,对应的内部数值为6400 - 32000。

如果有两个传感器,量程都是0 - 16MPa,但是一个是0 - 20mA输出,另一个是4 - 20mA输出。它们在相同的压力下,变送的模拟量电流大小不同,在S7-200内部的数值表示也不同。显然两者之间存在比例换算关系。模拟量输出的情况也大致相同。

上面谈到的是0 - 20mA与4 - 20mA之间换算关系,但模拟量转换的目的显然不是在S7-200 CPU中得到一个0 - 32000之类的数值;对于编程和操作人员来说,得到具体的物理量数值(如压力值、流量值),或者对应物理量占量程的百分比数值要更方便,这是换算的最终目标。

如果使用编程软件Micro/WIN32中的PID Wizard(PID向导)生成PID功能子程序,就不必进行0 - 20mA与4 - 20mA信号之间的换算,只需进行简单的设置。

通用比例换算公式

模拟量的输入/输出都可以用下列的通用换算公式换算:

Ov = [(Osh - Osl)*(Iv - Isl)/(Ish - Isl)] + Osl

其中:

Ov:
换算结果
Iv:
换算对象
Osh:
换算结果的高限
Osl:
换算结果的低限
Ish:
换算对象的高限
Isl:
换算对象的低限

它们之间的关系可以图示如下:

图1. 模拟量比例换算关系

 

实用指令库

在Step7 - Micro/WIN Programming Tips(Micro/WIN编程技巧中)的Tip38就是关于如何实现上述转换的例程。

为便于使用,现已将其导出成为”自定义指令库“,可以添加到自己的Micro/WIN编程软件中应用。

 

在这个指令库中,子程序Scale_I_to_R可用来进行模拟量输入到S7-200内部数据的转换;子程序Scale_R_I可用于内部数据到模拟量输出的转换。

其中scale_I_R程序段例:




 

 

将4 - 20mA模拟量输入转换为内部百分比值
将内部百分比值转换为4 - 20mA模拟量输出

 

对于精度要求不高的地方,4-20ma转换成0-20ma 可按比例计算

公式 =((ai-4)/16)*20

其程序段实例:

S7-200 +TD400C显示系统时间、运行时间的程序




看见论坛上有些朋友对西门子TD文本显示器显示时钟的问题比较关心,在这个帖子里笔者给出一个已经应用于工程上的程序例子,并作出详细分析,希望对关心这个问题的朋友有些帮助。

    这个程序是S7200+TD400C显示系统时间、当班运行时间、累计运行时间的例子。
    以下是s7-200 S7200+TD400C显示系统时间、运行时间的程序详解:
   
系统硬件配置如下:

    PLC:西门子S7-200 CN;CPU 226 CN REL
02.01;AC100~230V电源/DC24V输入/继电器输出;订货号6ES7 216-2BD23-0XB8;固件02.01 Build
2;ASIC:01.00。

    文本显示器:TD400C;订货号6AV6 6640-0AA00-0AX0;自带9芯TD/CPU电缆;版本:1.0.0.3。

    S7 -200与TD400C通过TD400C随机配置的TD/CPU通信电缆连接,实现电源供给和通信(因为当TD400C与S7-200
CPU之间的距离小于 2.5米时,采用TD/CPU电缆的方式进行供电;当TD400C与S7-200 CPU之间的距离超过2.5米时,使用外部电源供电并使用
PROFIBUS组件连接网络)。    系统软件配置如下:

    S7-200参数设置:在“系统块”的“断电数据保持”中设置VW1600以后2000个单元为断电数据保持。

    TD400C参数设置:

        TD400C地址:1

        CPU地址:2

        参数块地址:0

        波特率:9.6K

        HSA:31

        GUF:10

        键盘声音反馈:开

        屏幕保护时间:10分钟

­

­

­

S7-200的系统时钟调整为准确的北京时间。

    下面先写一下该程序所用到的存储器的意义,以便于理解程序。

本班运行时间:小时VW1600、分钟VW1604、秒VW1608;

累计运行时间:小时VW1620、分钟VW1624、秒VW1628;

系统时间(BCD码字节):年VB2000、月VB2001、日VB2002、小时VB2003、分钟VB2004、秒VB2005、星期VB2007;

系统时间(整数):     年VW1644、月VW1648、日VW1652、小时VW1656、分钟VW1660、秒VW1664;

本班设备开始运行时间:小时VW1680、分钟VW1684、秒VW1688;

本班设备最后运行时间:小时VW1700、分钟VW1704、秒VW1708;

上班时间设置:小时VW1720、分钟VW1724;

下班时间设置:小时VW1740、分钟VW1744;

本班运行时间复位:VW1760;

本班运行时间被复位的时间:年VW1764、月VW1768、日VW1772、小时VW1776、分钟VW1780;

累计运行时间复位:VW1800;

累计运行时间被复位的时间:年VW1804、月VW1808、日VW1812、小时VW1816、分钟VW1820;

EEPROM写入次数:VW3558

  ;

因为考虑到编程中可能会用到一些中间存储器,所以在TD400C中定义存储器时留了余量,每两个存储器之间都有1个字的存储器留作备用。    根据相关技术要求,先组态TD400C画面,达到预期目的。

  “工具”——“文本显示向导”,先配置TD400C:

  

  

  

  

  

      
然后点击“用户菜单”,配置用户菜单。因为该工程的界面要求很简单,所以每个菜单项只配置了1个屏幕(最多可以配置8个屏幕)。

      第1个屏幕:

  

  该屏幕中的第1个数据(这里的数据排列顺序为:先按第1排从左至右、再按第2排从左至右的顺序依次排列,下同):

  

  因为版面的问题,该屏幕的其它PLC数据和其它屏幕中的PLC数据就不一一列举了。这些数据都是VW、无符号数类型,具体对应情况请参阅3楼说明。    第2个屏幕:

      第3个屏幕:

  

  第4个屏幕:

  

  第5个屏幕:

  

      第6个屏幕:

  

  第7个屏幕:

  

  第8个屏幕:

      下面是主程序部分:

  首先在主程序中调用子程序:

      下面是子程序:

  先调用TD向导生成的子程序:

      

  

  

      TODR指令读到的实时时钟是BCD字节,要想把这个BCD字节显示出来,需要进行转换。

    在网上也曾查阅过,一部分人先用BTI指令把这个BCD字节转换整数,然后用ITA指令把整数转换为ASCII字符串,在画面中嵌入这个ASCII字符串用于显示。

    
笔者也这样试过一下,可能因为其它问题没有测试成功,而又突然想到——在程序的多处都需要用到这个实时时钟数据,所以转换为ASCII字符以后对程序其它地方没什么作用。经过考虑,我的转换思想是:先用BTI指令把这个BCD字节转换BCD整数,然后用BCDI指令把BCD整数转换为正常的十进制/十六进制整数,在画面中嵌入这个得到的整数用于显示。在程序的其它地方也可以使用这些实时时钟变量。    



  

  

  

  

      下面是该工程的TD400C显示画面:


2009年10月19日星期一

bcb中控制Edit控件只输入数字


在BCB中控制Edit控件的输入是件很麻烦的事,在这一点上BCB做的没有VC好。但是既然做为程序员,那就没有什么可以被难倒的。我们可以采取自己写代码控制的方法来实现对其的控制。这里只说两种简单的方法,抛砖引玉吧。



第一种:控制事件方法


在Edit控件的KeyPress事件中控制输入的Key,把不需要的Key设置成0,就OK了。例如:


void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

    //控制Edit1只能输入数字

    if ( (Key<'0'||Key>'9') && (Key != '\b') )

    {

        Key = 0;

    }

}

这种方法只能在KeyPress事件中,不能在KeyDown或KeyUp事件中。


第二种方法:调用API的方法


不说了看代码吧


void __fastcall TForm1::FormShow(TObject *Sender)

{

    //控制Edit2只能输入数字

    SetWindowLong(Edit2->Handle, GWL_STYLE, GetWindowLong(Edit2->Handle,GWL_STYLE)|ES_NUMBER);

}


或许朋友们有更好的方法,请告诉我。



[收藏]成功走上管理岗位的11个技巧

成功走上管理岗位的11个技巧

 能够帮助经理人"有所不为"的管理与领导技巧数不胜数,不过,本书精选的其中一些方法,能帮助他们更快地完成从一味地"执行"到侧重"管理"与"领导"的转变,是被实践证明了的很好的管理方法。我把这些关键的管理与领导技能称为"黄金技能",它们分别是:

  ・拓展下属的工作能力,包括给他们提供培训和授权。

  ・积极主动地倾听员工的心声。

  ・给予并接受员工的反馈。

  ・激励团队成员。

  另一种成功走上管理岗位的方法是,学会享受管理工作的乐趣,享受你能对其他人施加的积极影响。为什么不最大限度地发挥管理者的作用呢?很多"意外型经理人"都发现,当他们开始享受工作的乐趣,并意识到管理工作的重要性时,所有的问题都不存在了。有过这种经历的经理人告诉我,这种体验使他们的工作变得更轻松、压力更小了,以出乎自己意料的速度很快作出了成果。下面,我将与大家分享这些技巧,它们曾帮助很多"意外型经理人"成长为成功的经理人。

  1.不找借口。

  成功的经理人知道应该停止抱怨,停止抱怨公司或上层主管把自己安排到管理岗位上;也不会因为自己还没有准备好,或不善于做管理而自怨自艾;同时也接受下属员工有可能对管理者怨声载道的事实。他们把所有的精力都放在管理工作中,一旦他们做到了这些,工作就将变得充满挑战和乐趣。成功的经理人都不愿把创造力和精力浪费在给自己找借口上。

  2.尝试新事物。

  成功的经理人勇于尝试自己从未想过的新生事物,敢于去做其他的经理人从未做过的事情。举个例子,在华盛顿某个政府部门任职的一位经理人告诉我,她准备在今后每次会议开始前,给大家讲一则与管理有关的笑话(当然,一定是非常有意思的笑话)。这种做法与众不同,很快就帮助她增强了与员工的亲密关系。尝试新事物帮助这位经理人快速达到了自己的目标。

  3.自我激励。

  成功的经理人会告诉自己,最近哪些工作做得特别出色,在哪些方面又取得了进步,以及克服了哪些困难。他们经常与内心的自己展开积极的对话,自己祝贺自己。他们认识到,其他人不可能给予他们所需要的积极反馈。因此,他们自己行动,学会了自我激励。他们是非常自信的一群人。

  4.使目标可视化。

  成功的经理人对于自己想要达成的目标有着清楚的认识(比如,与每个下属建立良好的合作关系、让每个员工工作效率更高),并在脑海中不断加深对成功图景的印象,直到它已成为他们衡量自己及自身行动的一种标准。脑海中美妙的可视化图景能帮助他们取得难以置信的积极成果。

  5.认可员工的点滴进步,与下属构建信任关系。

  成功的经理人能够察觉下属的点滴进步,只要团队成员的工作取得了进展,就会适时地给予他们赞扬与鼓励。如果等到工作完成了才进行表扬,效果就不那么明显了。

  6.热情洋溢,说到做到。

  成功的经理人在取得成绩的时候都会兴奋异常。在分配任务或工作时,他们激情四射。他们从不放弃,并且鼓励其他人奋力一搏。

  7.不断地描绘愿景。

  当经理人与员工分享有关客户、商业环境、部门的突发事件、公司的未来发展方向等信息时,团队成员通常会对手头的工作更有兴趣。成功的经理人善于把员工的工作与部门及企业的目标结合起来。

  8.让员工知道你的企图心。

  经理人都有良好的企图心。他们想要管理得更出色,并带领团队走向胜利。然而,只有良好的企图心是不够的,因为没有人真正了解经理人的企图心是什么。在工作场合,人们评价经理人工作的标准,是他们的行动、举措,以及作出的成绩。成功的经理人知道,应该把自己的企图心贯彻到工作实践中,而不是一个人在那里孤芳自赏。

  9.增强员工的自信。

  有些经理人认为,帮助员工是经理人能做的最好的事情,这显示了对员工的关心和爱护,能赢得员工的尊敬。事实上,很多成功的经理人的观点与之截然不同。他们认识到,在大多数情况下,如果经理人能鼓励员工学习、发展,以及更独立地完成工作(并与其他团队成员团结互助),员工会更有自信,他们的工作质量、数量与速度都会提高。增强员工自信的最佳方式之一,是让团队成员参与决策。当员工亲身体验了决策过程,或根据自己的意志作出了决策之后,他们更有可能相信决策的正确性,更好地去执行它。如果只是经理人一个人作出决定,员工的响应程度就会差很多。当成功的经理人让团队成员参与决策过程时,员工就有了"主人翁"的意识。

  10.寻找一位导师。

  但凡优秀的企业,都会为经理人提供一位导师,帮助他们学习企业文化、规章制度,以及被企业认可的管理措施。如果企业没能提供这样一位导师,成功的经理人会在自己需要的时候,寻找适合自己的导师。经理人需要在企业中找到一位自己以及所有的团队成员都认可的导师,并且这个人要是一位出色的经理人。然后,经理人应该询问对方的意见,看他/她是否愿意帮助自己和自己的团队。

  11.与员工建立信任关系。

  在走上管理岗位后不久,经理人就发现,如果下属员工信任自己,管理工作就会变得更轻松,自己也可能取得更好的业绩。不过,与员工建立信任关系并不那么容易,因为绝大多数员工都对领导的动机抱有或多或少的怀疑。然而,如果经理人能够说到做到、履行诺言,维护员工的利益、诚实守信,为员工提供必要的人力与物力支持,不断地员工沟通,在个人层面上了解每一个员工,并为下属创造发展与成长的空间,就有可能与员工建立起信任关系。

【收藏】bcb中控制Edit控件只输入数字

bcb中控制Edit控件只输入数字

bcb中控制Edit控件只输入数字
2008年12月31日 星期三 10:55

在BCB中控制Edit控件的输入是件很麻烦的事,在这一点上BCB做的没有VC好。但是既然做为程序员,那就没有什么可以被难倒的。我们可以采取自己写代码控制的方法来实现对其的控制。这里只说两种简单的方法,抛砖引玉吧。

第一种:控制事件方法

在Edit控件的KeyPress事件中控制输入的Key,把不需要的Key设置成0,就OK了。例如:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
    //控制Edit1只能输入数字
    if ( (Key<'0'||Key>'9') && (Key != '\b') )
    {
        Key = 0;
    }
}
这种方法只能在KeyPress事件中,不能在KeyDown或KeyUp事件中。

第二种方法:调用API的方法

不说了看代码吧

void __fastcall TForm1::FormShow(TObject *Sender)
{
    //控制Edit2只能输入数字
    SetWindowLong(Edit2->Handle, GWL_STYLE, GetWindowLong(Edit2->Handle,GWL_STYLE)|ES_NUMBER);
}

或许朋友们有更好的方法,请告诉我。

[收藏]840D可扩展零偏�G505~G599

840D可扩展零偏–G505~G599

如果设定参数中的零点偏置中只能设定G54~G57,设定可扩展零偏如G505、G506 的方法如下:

   MENU SELECT–>“START UP”
  –>“MACHINE MD”
  –>“CHANNEL MD”
  –>找到“28080”.把它更改为“100”(增加坐标系数不大于100)更改
       此参数后会出现44000号报警。
–>MENU SELECT
–>进入服务(SERVICE)
–>按扩展键”>”
–>连续启动,进行NC数据备份,注意要选择补偿文件
–>回装刚才的备份
–>到此为止你就能看到G505~G599了
  (*注意:通过这个参数可以增加零点偏置,但是不要随便修改此数据,因为它牵涉到NC内存的重新分配,随意修改它可能会丢失部分其它数据,最好由机床厂家改。)

[收藏]bcb中输出一定长度的带有省略号的字符

bcb中输出一定长度的带有省略号的字符

//输出一定长度的带有省略号的字符
AnsiString __fastcall TForm1::StringFormat(const AnsiString & String, const int n)
{
    AnsiString temp = "";
    int tmpLength = n - Canvas->TextWidth("AAA");
    if ( Canvas->TextWidth("A") * String.Length() <= n)
    {
        return String;
    }
    else
    {
        int t = 0;
        char *q = String.c_str();
        for (int i=0;i<String.Length() && t<tmpLength; ++i)
        {

            temp+=q[i];
            t = Canvas->TextWidth(temp);
        }
        return (temp+"...");
    }
}
/////////////////////////////////////////////////////////////////////////

[收藏]移动没有标题栏的窗体发送

移动没有标题栏的窗体_清茶几许,人生百味

在窗体的顶部放上一个Image控件

然后在Image控件的MouseDown事件中写入如下代码
// 移动没有标题栏的窗体
Refresh();
if(Button == mbLeft)
{
ReleaseCapture();
Perform(WM_SYSCOMMAND, 0xF017, 0);
}

【收藏】C++ Builder 2010 安装ShockWave(即flash)控件

C++ Builder 2010 安装ShockWave(即flash 控件

罗树鹏 2009-10-12

安装了c++builder 2010(以下叫CB2010),发现在CB2010安装组件和BCB6完全不同。今天就将我如何在CB2010下安装Shockwave组件的方法写出来,希望对大家有个帮助。

对于这类组件的安装比较麻烦(相比其它两类组件来说)。首先创建一个BPK,步骤是选择菜单中的"Component",然后选择"Import Component"在弹出的Import Component界面中选择"Import ActiveX Control"

点击"Next",进入下一步。

选择需要导入的ActiveX组件,点击"Next",进入下一步。

选择这个组件要放入的Palette Page,然后点击"Next",进入下一步。

在这里我选择的是创建新的Package,也可以选择其它选项。点击"Next",进入下一步。

选择创建的包的路径和名称,填写描述,点击"Finish",后,IDE会自动编译下这个包。但是会出现类似于下面的错误。

Build

Checking project dependencies...

Compiling ShockWave.cbproj (Debug configuration)

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::GetDispID(wchar_t *, unsigned long, long *)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::RemoteInvokeEx(long, unsigned long, unsigned long, tagDISPPARAMS *, tagVARIANT *, tagEXCEPINFO *, Shockwaveflashobjects_tlb::IServiceProvider *, unsigned int, unsigned int *, tagVARIANT *)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::DeleteMemberByName(wchar_t *, unsigned long)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::DeleteMemberByDispID(long)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::GetMemberProperties(long, unsigned long, unsigned long *)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::GetMemberName(long, wchar_t * *)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::GetNextDispID(unsigned long, long, long *)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unresolved external '__stdcall Shockwaveflashobjects_tlb::IDispatchEx::GetNameSpaceParent(IUnknown * *)' referenced from F:\个人重要资料(勿删)\ADMINISTRATOR\桌面\DEBUG\SHOCKWAVEFLASHOBJECTS_OCX.OBJ

[ILINK32 Error] Error: Unable to perform link

Failed

Elapsed time: 00:00:03.7

这个问题的解决方法是把这几个出错的函数(应该是8个)声明成内联函数,即加inline关键字或者把实现部分回到头文件中。

然后就可以Build这个组件,如下图:

接下来安装这个组件就行了。

扩展知识:

1、本身就有BPK包的组件:安装这类组件很简单,首先打开这个组件的BPK安装包,然后在左面的Project Manager 中就会出现然后右键点击"te_db_dsgn_d9.bpl"选择"Install"就可以将此类组件安装上。

2、没有BPK文件而只有PAS文件或CPP文件的组件:我自己写的组件都不将它们打成BPK包。一般都会只是一个或者多个PASCPP)文件。安装这类组件首先要新建一个BPK然后右键选择"Contains"并点击"Add"加入自己的PASCPP)文件,然后如同第一个组件的安装即可。