可编程控制进料和速度的透镜磨边系统.pdf

上传人:a**** 文档编号:537291 上传时间:2018-02-21 格式:PDF 页数:51 大小:1.73MB
返回 下载 相关 举报
摘要
申请专利号:

CN91101319.9

申请日:

1991.02.27

公开号:

CN1055688A

公开日:

1991.10.30

当前法律状态:

终止

有效性:

无权

法律详情:

专利权的终止(未缴年费专利权终止)授权公告日:1994.12.21|||保护期延长|||著录事项变更变更项目:专利权人 地址变更前:博士伦有限公司 美国纽约州变更后:勒克索蒂卡公司 意大利阿科多|||授权||||||公开

IPC分类号:

B24B9/14

主分类号:

B24B9/14

申请人:

博士伦有限公司;

发明人:

戴维·L·布赖昂

地址:

美国纽约州

优先权:

1990.02.27 US 485,426

专利代理机构:

中国专利代理有限公司

代理人:

郭伟刚;程天正

PDF下载: PDF下载
内容摘要

一种用于对透镜磨边的计算机数控机系统根据存在存储器中的透镜形状控制透镜工件相对于磨边工具的旋转和位移。该系统将透镜工件连续轴向平移过磨边轮的表面以便使磨损均匀分布在磨边轮表面,从而减少对磨边轮修整的要求。该系统将透镜尺寸与预定尺寸相比较并通过在对连续透镜工件磨边期间自动调整透镜轨迹来补偿其任何差值,从而允许磨边轮磨损而没有明显的透镜尺寸误差。该系统在整个透镜磨边操作期间的每个离散点上控制磨边工具的速度、透镜旋转速度、透镜轴向进料速度和透镜工件与磨边轮间的力以优化产量而避免透镜工件过热。

权利要求书

1: 一种用于对光学透镜工件的边缘轮廓加工成形的透镜磨边系统,它包括: 一个磨边工具, 用于夹持该透镜工件的夹持装置, 用于存储代表相对于该磨边工具透镜边缘研磨轨迹数据的存储器装置, 用于移动夹持装置而将透镜工件围绕该夹持装置的轴旋转过一系列的旋转角并对应该一系列旋转角将透镜工件的边缘压向该磨边工具到一系列透镜半径的伺服装置, 与该存储器装置相连用于控制伺服装置从而根据存储在存储器中代表透镜边缘研磨轨迹的数据调整所述一系列透镜旋转角和一系列透镜半径的可编程微处理机。
2: 权利要求1所述的系统,其特征在于:所述伺服装置包括用来使所述夹持装置将透镜工件轴向平移过所述磨边工具表面的装置,所述微处理机装置使所述夹持装置将透镜工件连续地平移过所述磨边工具表面,从而使磨边工具需要修整的频率减为最小。
3: 权利要求1所述的系统还包括用于检测由磨边工具对其边缘进行研磨的透镜工件的半径的透镜尺寸传感器装置,其特征在于:所述微处理机装置包括: 用于将所述传感器装置探测到的实际透镜半径与预定值相比较并计算其差值的装置, 用于修正所述一系列透镜半径以补偿所述差值,从而允许磨边工具磨损而不会在磨边工具上磨边的一系列透镜的实际透镜半径中引起相应误差的装置。
4: 权利要求1所述的系统,其特征在于: 所述存储器装置包含在沿透镜轨迹N个点上确定透镜半径和透镜旋转角的表,该表包含透镜轨迹数据,该表还在N点的每一个点上至少确定下列参数之一的对应值:(a)透镜工件相对于磨边工具轴的平移速度,(b)透镜旋转速度,(c)磨边工具速度,以及(d)将透镜工具夹持贴靠于磨边工具的力,从而确定一系列参数值,以及 所述伺服装置包含由微处理机装置控制的用于根据存储器中表的内容至少控制参数之一的装置。
5: 权利要求4所述的系统,其特征在于:存储器中的一系列参数值由试错法确定,该方法包括: 在磨边工具上研磨透镜工件的边缘,同时至少改变参数之一,以便在监测透镜工件过热的同时获得许多参数的组合, 除去监测步骤探测到透镜工件过热的那些组合,以及 将具有最高磨边工具速度而没观察到过热的组合存储在表中。
6: 权利要求5所述的系统,其特征在于:在一系列透镜半径和透镜旋转角的每一个上执行该方法从而产生表的一组对应的连续条款。
7: 权利要求1所述的系统还包含: 用于存储多个将在磨边工具上磨边的透镜毛坯的卸料圆盘传送带装置, 用于存储多个在磨边工具上由磨边透镜毛坯形成的透镜的装料圆盘传送带装置, 由微处理机装置控制的用于从卸料圆盘传送带装置中抓取一系列透镜毛坯中一个并将其放在夹持装置之间的卸料臂伺服装置, 由微处理机控制用于将由透镜毛坯研磨成的透镜从夹持装置取出并将其放入装料圆盘传送带装置的装料臂伺服装置。
8: 权利要求1所述的系统还包括: 用于接收透镜设计数据的输入装置, 用于从透镜设计数据计算代表透镜边缘研磨轨迹的数据并将透镜轨迹数据存入存储器的可编程装置。
9: 权利要求8所述的系统,其特征在于:磨边工具包括一个柱面部分和一个用于对透镜边缘倒边的顶尖部分,其特征还在于:用于计算透镜轨迹数据的可编程装置包括用于接收加到透镜设计数据上的下列规范的装置,所述规范为:(a)磨边工具顶尖部分的夹角,和(b)磨边工具柱面部分的半径。

说明书


本发明涉及用玻璃毛坯使透镜成形的透镜磨边机领域。

    在该工艺中透镜磨边机是熟知的,例如在授予Ramos等人的美国专利第4,870,784号中所描述的一种。一般,透镜由毛坯形成,该毛坯根据所希望的光焦度而具有一定的曲率。验眼透镜的曲率提供矫正光焦度。深色眼镜或太阳镜的透镜曲率一般不提供矫正光焦率。形成具有所希望的曲率的透镜毛坯后,必须将该透镜“加工”(“Cut”out)成适合眼镜框架的形状。这可通过“磨边”或用诸如研磨轮的磨边工具研磨透镜的边缘直到达到所希望的透镜形状来完成。如果透镜是眼用的,磨边过程可由在上述参考的授予Rames等人的专利中所描述的透镜磨边机来完成,该磨边机在研磨轮中使用刻槽对透镜边缘倒边。另一种一般用来制造非眼用透镜的透镜磨边机在研磨轮中使用顶尖对透镜边缘倒边。透镜边缘的斜边能使透镜与眼镜或太阳镜的框架紧密配合。两种透镜磨边机都使透镜毛坯相对于研磨轮旋转。同时,当透镜毛坯旋转时,磨边机根据将要从该透镜毛坯所形成地透镜形状改变透镜毛坯中心与磨研轮间的位移。在上面讨论的两种透镜磨边机中,如在该工艺中所熟知的,所述位移借助于具有所希望的透镜形状相对于固定表面随透镜毛坯旋转的凸轮来变化。这个特点的一个问题是每次制造不同的透镜形状必须暂停磨边机的运转并改变凸轮。由透镜毛坯形成透镜后,如前所述,它被切削成斜边。然后将透镜边缘进行细磨或抛光以完成该加工。

    现有透镜磨边的方法被透镜间所表现的如超差情况的质量不一致和非均匀性所困扰。有几个原因。第一,一般是象金刚石一样的材料或任何适合于研磨透镜的材料的研磨轮在使用中不断磨损并逐渐变小,从而导致透镜尺寸增大。第二,凸轮和相对其必须移动和摩擦的表面不断磨损,导致更大的滑动和振动,这使由凸轮运动所决定的透镜形状畸变。现行方法也为高的维修成本和停机时间所困扰。这是由于研磨轮以非均匀方式磨损,必须定期加以修整。也如前所述,研磨轮随着使用变小,因此必须在透镜尺寸增大超过容许极限前定期更换。每次对研磨轮整形或更换,磨边机都要停机而不再生产。

    这样的透镜研磨机不能始终如一地生产出同样尺寸的透镜是由于每块透镜是在同一磨边机中在研磨轮、凸轮和磨边机其它磨损表面寿命的不同时期形成的结果。另外,不同磨边机的相同元件磨损点不同,因此,在不同磨边机上制造出的透镜必然有稍微不同的尺寸。这样的不一致在试图将透镜安装到框架中时便会产生困难。

    另一个问题是透镜的磨边速度必须充分放慢以避免损坏玻璃透镜材料。如果试图提高产量将研磨轮的速度和(或)透镜的旋转速度增大到在研磨过程中可观察到电火光,则玻璃材料会受到损坏并使高质量护目镜变得无用。即使没有观察到火花或小玻璃粒子的燃烧,作为磨边太快的结果,可能使透镜表面太粗糙而不能接受。由于这些原因,透镜研磨速度必须放慢以避免损坏玻璃透镜材料的任何冒险。不利的是这样慢的生产速度使生产透镜的成本提高。

    如在上述参考的授予Ramos等人的专利中所公开的,已使用计算机来辅助透镜磨边工艺。具体地说,使用计算机根据透镜大小将透镜边缘直接定位在Ramos等人的研磨轮中的倒边槽上,不同大小透镜相对于该槽需要不同的定位。Ramos等人专利中的计算机也控制操作序列。

    本发明是一种可预编程透镜磨边机系统,该系统在微处理机的控制下与编程在存储器中的透镜边缘形状相适应地对透镜边缘研磨和倒边。该系统通过由微处理机控制的象机器人一样的手臂夹持透镜毛坯。根据编程在存储器中的透镜边缘形状,由手臂使透镜的旋转以及手臂相对于研磨轮的运动决定了透镜的形状和大小。通过简单地修正微处理机存储器中不同透镜边缘形状,可容易地改变透镜边缘形状和大小,这样节省了在以前透镜磨边机中更换凸轮所需的时间。

    该系统包括一个透镜尺寸传感器,在通过微处理机的自校正反馈回路中,该反馈回路自动补偿研磨轮的磨损收缩。所述自校正反馈回路根据对透镜尺寸的监测频率允许该磨边机使用同一研磨轮且磨损到几乎为一核心而透镜大小仍没有明显的变化。

    本发明也包括一种将磨损至少分配到近乎全部研磨轮表面的方法,从而在大体整个透镜边缘研磨操作期间透镜毛坯连续沿轴向移动过研磨轮表面,以致于使研磨轮表面磨损均匀分布。这种均匀磨损工艺避免了在研磨轮中形成空隙或槽,这在先前的磨边机中需要通过经常对该轮子修整来消除。在本发明中,借助于自校正反馈回路研磨轮不需更换直到它完全磨损,借助于均匀磨损工艺研磨轮不需修整,这样消除了在以前的透镜磨边机中由于经常留心研磨轮的维修而需要的经常性中断。

    根据本发明的一个方面,在通过研磨轮柱面部分的研磨形成透镜边缘形状后,将透镜边缘在研磨轮顶尖部分上通过相对研磨轮顶点的对侧连续对旋转透镜边缘对侧进行倒边。在本发明这一方面中,透镜的旋转运动以及夹持透镜的象机器人一样的手臂的运动,根据从透镜的形状和曲率和研磨轮顶尖形状计算出的存储在存储器中的轨迹由微处理机予以控制。作为使用在本说明书中的术语“轨迹”同时指(a)透镜关于其上固定中心点的旋转路径,(b)垂直于研磨轮旋转轴的透镜的径向运动路径和(c)平行于研磨轮旋转轴的透镜的横向运动路径。对于同一种透镜可将不同的倒边轮廓编程到存储器中,而对许多不同透镜可将同一倒边轮廓编程到存储器中。

    根据本发明,将透镜或透镜毛坯的运动在整个透镜边缘研磨和倒边过程时间中分为N点。例如N为64,000量级。透镜相对研磨轮的旋转速度、研磨轮的旋转速度、透镜沿轴平移过研磨轮表面的速度以及将透镜压靠在研磨轮上的力对于N点中每一点都确定在存储器中。微处理机对于每个要制造的不同透镜形状需要将一整套这样的定义存储在存储器中。

    在本发明的另一方面中,该组透镜旋转速度、研磨轮速度、轴向透镜进料速度以及研磨压力在N点的每一点上优化以使透镜研磨速度(产量)最大到稍低于玻璃透镜材料过热的速度。根据本发明的试错法在N点的每一点上决定每个参数(旋转速度、速度、进料速度和研磨压力)的优化值,在该方法中将所有参数的各种组合在N点的每一点上试过并将结果存储在存储器中。在该方法的一个实施例中,微处理机在监测安装用来检测玻璃透镜材料过热的火花传感器时系统地变化所有参数(旋转速度、速度、进料速度和研磨压力)。对于透镜运动中N点的每一点,微处理机注意所有参数在传感器没有检测到过热时的研磨轮最高速度时的值。微处理机将注意到的值存储在存储器中。在所有N个点上执行该过程后,就完成了试错过程,存储器对给定透镜形状的整个研磨过程含有一组优化研磨参数。然后将这组参数永久性存储(例如存储在硬盘上或只读存储器中)并在生产同样设计的透镜中一次又一次重复使用。该学习过程只需要充分容量的存储器。

    将玻璃从透镜上磨掉的优化速度至少部分取决于被磨掉的玻璃粒子从工件或透镜毛坯上带走热量的能力。为了保持一定的散热速率,当研磨过程中工件(透镜毛坯)尺寸减小时应防止玻璃切消速度的降低。因此,在许多场合本发明的试错学习法在研磨过程中透镜毛坯的尺寸减小时可逐渐增大研磨轮速度。在这个意义上,由本发明试错学习法产生的一组优化研磨参数将执行熟知的有时称之为“恒定表面磨削”的金属车床技术原理。

    下面将参照附图详细说明本发明最佳实施例,附图中:

    图1a和1b示出研磨透镜边缘的现有技术的装置;

    图2a和2b分别示出透镜毛坯和由图1a的装置从该毛坯生产出的透镜;

    图3是简单示出本发明透镜磨边系统的关键元件的示意图;

    图4是示出图3的系统中使用的透镜伺服臂的图;

    图5a和5b示出图3中系统的完整型式;

    图6是一个示范性透镜边缘外形的极坐标图;

    图7描绘了一个没有曲率的透镜以恒定的透镜旋转速度在磨边期间在研磨轮柱面部分(实线)和研磨轮顶尖部分(点线)上透镜轨迹的极坐标;

    图8描绘了一个具有球面弯曲的透镜的与图7相对应的透镜轨迹的极坐标;

    图9a、9b和9c是分别描绘作为时间的函数相对于研磨轮的透镜运动的垂直位置、水平位置和水平(进料)速度的示范性透镜轨迹板坐标;

    图10描绘了在透镜磨边过程中对于每个随时间递增点存储在图3系统的存储器中的所有研磨工艺参数的图表;以及

    图11是示出本发明为获悉将写入图10表中参数优化值的编程学习过程的流程图。

    图1a示出了现有技术透镜磨边过程中的基本步骤。研磨轮10包括柱面部分12和顶尖部分14,两部分都具有如图1b所示的同心圆形状。研磨轮10由金刚石似的材料制造而成。将图2a所示的透镜毛坯16沿其边18在图1a的柱面部分12上研磨形成图2b中的透镜20。然后分别将透镜边缘18的“左”角18a在顶尖部分14的“右”边14a上研磨,将透镜边缘18的“右”角18b在顶尖部分14的“左”边14b上研磨分别形成倒边的透镜表面22a和22b。所述倒边表面22a和22b的几何形状符合将要把透镜20安装在其中的护目镜框架形状。

    研磨过程中透镜的运动由旋转凸轮(未示出)相对固定表面的运动所控制,该凸轮具有与图2b所示的透镜20同样的形状。现有技术的方法和装置具有许多如前讨论的缺点,这些缺点是由于研磨轮10表面的磨损、凸轮表面的磨损和由于磨损不均匀在研磨轮10表面中形成的空隙,以及每次对于不同的透镜设计必需更换凸轮所引起的。

    在图3所示的本发明透镜磨边系统中解决了所有这些问题。由安装在伺服控制臂30上的伺服控制手28将每块透镜毛坯从含有许多透镜毛坯的圆盘传送带26中取出,该伺服控制臂30由臂伺服控制器32控制,而中央微处理机34控制臂伺服控制器32。旋转圆盘传送带26的位置由微处理机34通过圆盘传送带旋转控制器25应用熟知数字伺服控制技术进行控制。在一个执行过程中,手28沿臂30轴向运动以至其将自己延伸到圆盘传送带26(虚线位置)并通过在手指35、36间压紧其相对边缘夹持透镜毛坯16。手指36可向另一手指35移动将透镜16牢牢夹紧。然后手28将透镜毛坯16取出,臂30围绕转轴38旋转到实线位置。手28然后沿臂30轴向运动将透镜插入安装在旋转心轴44、46上的相对主动盘40、42(图4)之间。心轴44、46支承在由透镜伺服控制器54操纵的透镜伺服臂52的相对梁48、50上。透镜伺服控制器54由微处理机34控制。一旦将透镜毛坯16置于该对主动盘40和42之间,透镜伺服控制器54就使相对梁48、50相互朝对方移动以将透镜毛坯16紧握在两个主动盘40、42之间,如图4所示。然后微处理机34指挥透镜伺服控制器54将臂52移动到研磨轮10并将透镜毛坯16的边缘顶在轮10上,借助于由透镜伺服控制器54控制的心轴马达58使心轴44、46旋转。

    透镜伺服控制器54在透镜毛坯绕着心轴44、46的轴旋转时变化透镜毛坯16中心(即心轴44、46的轴)到研磨轮10轴的距离R以获得所希望的透镜边缘轮廓或形状。透镜伺服控制器54由微处理机34根据存储在透镜形状轨迹存储器60中的透镜轨迹表控制这样做。该透镜轨迹表根据透镜将要形成的形状对透镜毛坯16围绕心轴44、46的轴的每个递增旋转位置θ定义透镜毛坯中心和研磨轮10间的距离r。应用现有技术熟知的计算机数控机床技术,微处理机34使用存储在透镜伺服控制器程序存储器62中的伺服控制器程序从存储在透镜形状轨迹存储器60的数据中计算出伺服控制信号。产生伺服控制器程序在该领域中是普通的。微处理机34依次传送这样产生的控制信号,该信号决定了透镜边缘研磨步骤的顺序。

    一旦完成透镜磨边过程,就由透镜伺服臂保持透镜边缘18的角18a贴着旋转的边缘间歇(break-edge)轮61对透镜边缘进行细磨。

    透镜形状轨迹存储器60可包含对不同轨迹大范围的选择表,用于制造具有不同边缘轮廓的不同透镜。这样,透镜设计可通过指示微处理机34到存储器60中不同的表而得以迅速改变,这是一个显著的优点。

    随着研磨轮10的磨损,它变得越来越小,这在现有技术中将使透镜尺寸增大。解决的办法曾是经常更换研磨轮10使在透镜接连被磨边时透镜尺寸的增大为最小。在本发明中通过使用一个经探头输出电路66连接到微处理机34的尺寸探头64解决了这个问题。该探头64是例如英国Gloucester,Renishaw  Metrology有限公司生产的那种类型。由图3的系统形成透镜20后,透镜伺服臂52把透镜旋转到预定的旋转位置θ、然后沿边缘将透镜20朝探头64移动。微处理机34记录探头64第一次测定与透镜边缘接触时透镜伺服臂52的位置点。这个位置表示在旋转位置θ处透镜20的关径r。正确位置可容易地从希望的透镜边缘轮廓中确定。微处理机34对实际位置与正确位置进行比较并计算其差值。微处理机34通过调整(减小)下一个将要磨边的透镜与研磨轮10的轴间的距离来补偿这个误差。基本上,微处理机34对整个磨边过程调整透镜轨迹使它向轮10的旋转轴靠近相等于计算出的位置误差的数据。这个特点将在下面描述。因此,只要足够频繁地监测透镜半径,就可允许研磨轮10在接连透镜磨边期间磨损到几乎到其轴而不产生透镜尺寸方面的误差。

    现有技术的另一问题是大部分透镜磨边发生在研磨轮10的柱面部分12上,非均匀磨损在研磨轮中产生空隙或不希望的槽。因此,研磨轮10必须经常修整。本发明包括解决该问题的方法,在该方法中微处理机34使透镜伺服臂52在整个透镜磨边操作期间连续将透镜毛坯16沿轴平移过研磨轮10的表面,同时控制从轮10的一端到另一端透镜的轴向进料速度,从而使磨损均匀地分布在轮10的整个表面。当透镜接触研磨轮10的顶尖部分时在倒边操作期间继续该轴向运动。

    根据本发明的均匀磨损分布方法,透镜伺服臂52必须执行一个复合作业,即在根据要求的透镜形状变化透镜毛坯16到研磨轮10的距离的同时使该透镜毛坯16旋转,并同时以连续运动方式将透镜轴向平移过轮10的表面。如将在下面讨论的,这个作业在轮10的顶尖部分14对该透镜倒边时将更复杂。

    参照图5,本发明的最佳方法需要同一微处理机34来控制由使用一对透镜伺服臂52、53的一对研磨轮10、11对一对透镜同时研磨。对于两个研磨轮10、11中的每一个都有一个卸料臂30(如图3中所示)和一个装料臂31,一个卸料圆盘传送带26(如图3中所示)和一个装料圆盘27。对于一个透镜伺服臂52,卸料臂30将透镜毛坯16从卸料圆盘传送带26取出并将其交给透镜伺服臂52进行研磨。在研磨过程结束时,装料臂31将透镜从透镜伺服臂52中取下并将其放入装料圆盘传送带27中。使每个圆盘传送带进行旋转,将圆盘传送带中的当前槽定位到下一个槽,以便对应下个周期的装料或卸料臂。最好是,对微处理机34编程,使其操作圆盘传送带以及装料和卸料臂,以致于当将一个已完成的透镜放入装料圆盘传送带时,便从卸料圆盘传送带中取出下一个透镜毛坯,从而没有浪费的动作。一个优点是同一周期可用来同时生产一对有待装入同一护目镜框架的透镜,因此增大了每对透镜紧密配合的可能性。

    图6以板坐标示出一个示范性的透镜边缘形状。图6中半径r相当于图4中透镜20中心(心轴44、46的轴)与研磨轮10的表面间的距离r。在这里定义为,透镜中心是指透镜20在研磨过程中围绕其旋转的点。图4中的距离R是透镜中心与研磨轮10中心间的位移。r和R之间的差是研磨轮10的半径。图7中的实线曲线是作为对应于图6的极坐标图的透镜旋转角θ的函数R的曲线图。该实线曲线是存储在透镜轨迹存储器60中的数据所确定的轨迹,其控制透镜毛坯16在研磨轮10的(仅仅)柱面部分12上的运动。

    在倒边操作期间透镜20的轨迹更加复杂并取决于研磨轮10顶尖部分14的斜度以及透镜20本身的曲率。假设图6的极坐标图中所描绘的透镜形状没有曲率-最好是平面-在倒边操作过程中透镜轨迹可通过将图7的倾斜虚线叠加到实线曲线上并将两者加到一起来获得。所得复杂的透镜轨迹(点线)描绘了在倒边期间当根据本发明将磨损均匀地分布在整个研磨轮表面的方法以恒定速度将透镜轴向平移过顶尖部分14的表面时相对于研磨轮10的透镜轨迹。该点线曲线描绘了透镜轨迹的部分,其中透镜爬上顶尖14的一侧、然后下落到另一侧,以便将磨损均匀分布横过顶尖部分14的表面。因此,图7的点线曲线对应于存储在存储器60中用于透镜研磨过程的倒边部分的数据。

    在大部分情况下,透镜轨迹在倒边期间甚至更为复杂,这是因为透镜一般都具有球面曲率(如图1a中透镜20的侧视图所示)。这种复杂的透镜轨迹可在图8的曲线图中通过将定义透镜边缘形状的实线曲线与非线性虚线曲线相加来获得。图8的非线性虚线曲线的形状由透镜曲率和研磨轮10的顶尖部分14的夹角α所控制。不象图7,对图8更复杂的情况没有示出在倒边期间所得的透镜轨迹,但是通过将图8的两条曲经相加在理论上获得所得透镜轨迹。通过改变透镜20与顶尖14中心间的距离R,透镜边缘的倒边深度可按要求加以改变。

    一种在倒边期间获得透镜轨迹的更实际的方法是使用球面三角法根据熟知的原理来计算它。用于完成这项工作的计算机程序作为附录A附加在本文中。这样的计算机程序可由微处理机34执行并可存储在透镜运动程序存储器64中。这样的程序仅需要使用者输入包括透镜形状(如图6的极坐标所代表)、透镜曲率(例如可在图1a的透镜侧视图所见)的透镜设计数据和研磨轮10的顶尖部分14的夹角α。这样的输入数据可存储或进入图3所示的外部设备66中。该外部设备可以是存储器或诸如调制解调器的通讯设备。因此,可从距离远的地方通过调制解调器(66)输入新的透镜设计并使用存储器66中的透镜运动程序由微处理机34迅速自动计算出完整的透镜运动。由微处理机34与别的透镜设计相对应的表一道将所得透镜轨迹表存储在存储器60中。改变或更新透镜设计的整个过程在图3的系统中实际上不需要人工干预,这是一个显著的优点。

    R和r间的差值是研磨轮10的半径,当轮磨损时它就减少。如前所述,由微处理机34执行的自校正反馈方法周期性地在一些预定的透镜旋转角θ将实际透镜半径与该角度时如图6的曲线图所确定的正确半径相比较。任何差异表示研磨轮半径由于磨损而减少的数据。微处理机34通过从(例如)图7的图表中所有R值中减去在一些预定角度θ检测出的实际和理想透镜半透之差值来简单地改变轨迹。

    结果由图7的点划线所示。图7中实线和点划线间的位移E是由微处理机34检测到的理想和实际透镜半径间的误差或差值。因此,随着研磨轮半径减小,微处理机34通过减小必要的R而将作为透镜旋转角θ的函数的透镜半径r保持在正确值上。

    所有控制透镜磨边过程的参数都定义在存储于存储器60的表中。这里已讨论过透镜形状参数r和θ以及由本发明的均匀磨损分布方法所要求的连续轴向进料速度。剩下的参数包括透镜的旋转速度(dθ/dt)、研磨轮速度和透镜边缘贴压在研磨轮上的力。

    为通过微处理机34执行离散控制,将由矢量(r,θ)所定义的透镜的移动分为N个离散段。在下面的例子中,N=64,000,尽管应该认识到熟练工人可对N选择任何合适的值。这些段可认为是覆盖整个磨边过程期间的N个时间点t0、t1、t2、……tN。距离轮10轴的透镜中心的位移Y作为时间的函数如图9a所示。图9a中的三角形凸峰对应该过程的倒边部分。图9b与图9a属于同一时期并示出透镜中心作为时间的函数沿研磨轮轴的位置X。在图9b的个别例子中,透镜的进料速度(dx/dt)在该过程的倒边部分期间变小。这图示在图9c中。然而,应该理解进料速度的任何顺序或变化是可能的。

    图9a、9b和9c对应图4中所表明的透镜轨迹,其中透镜毛坯16不间断地轴向横过研磨轮10。前面提到的所有参数可以同样的方式图示。将这样的图分为N个点(以图9a、9b和9c的方式)并数字化代表存储在存储器60中的数据。

    图10以表的形式示出存储在存储器60中的数据格式。在将该过程分为(标号为t0、t1、t2等)图10的表中的64,000个点的每一点上确定透镜轴向进料速度、研磨轮速度、透镜旋转速度、研磨力、位移r和透镜旋转角θ。在该过程的每一点ti,微处理机34从图10的表(存储在存储器60中)取出上述参数每一个的对应值并从中确定送到透镜伺服控制器54、研磨轮马达70和透镜旋转马达58的伺服控制信号中的任何变化。通过控制透镜伺服臂52的运动,透镜伺服控制器54控制透镜沿轮10轴的轴向平移速度、透镜的旋转速度以及透镜中心离研磨轮10表面的距离r。

    熟练工人可以作出图10中表的各种实际实施例,其中某些前述参数如前面提到的作为多余部分或不必要而省去。例如,在N个时间点的每一点规定透镜的旋转角度θ可避免要求在N点的每一点规定透镜旋转速度dθ/dt。

    没有已知的方法用于在将透镜磨边过程分为图10表中的N=64,000点的每一点上对所有前述参数计算优化值。根据本发明,将N点的每一点上的所有参数的优化值数组定义为导致最大产量而不损伤玻璃透镜材料的数组。这种损伤由在磨边或磨边过程后在透镜边缘上的粗劣表面抛光期间可见的火花(玻璃粒子的燃烧)来表现。

    本发明用图10表中的参数优化值对存储器60编程并操作图3系统的方法,从图11所示的流程图中的初步学习步骤着手。基本上,在将该过程分为图10的表中的N点的每一点上所有参数都要进行变化,并且将具有在研磨轮旁最高的玻璃透镜材料的移动速度而没损伤该材料的表现的参数值的组合选择为该过程中那一点的优化数组。将该作业执行N次以便在N点的每一点上找到参数值的优化组合。

    在图11的实施例中,该方法使用了一个图3中所示的火花传感器72(诸如红外传感器),安置来探测任何由研磨轮10从透镜毛坯16磨掉的玻璃粒子火花。微处理机34在透镜研磨过程(图11的块80到108)中N点的每一点上使该系统自动地系统地逐步通过图10表中所有参数的所有可能组合。对于参数值的每一组合,微处理机34询问火花传感器72以决定该组合是否被准许。在将所有数据存储后,微处理机34找到最大的允许的研磨轮速度并将其与别的参数值一起同时存入存储器60中的图10的表中(图11的块110)。这样微处理机34通过对透镜磨边和倒边过程分成N点的每一点执行前述作业将所有条款填入图10的表中。

    在图11的简化实例中,为指导清楚起见,假设透镜毛坯16轴向平移过研磨轮10表面的线进料速度在整个磨边过程期间为恒定的,并在倒边期间降低为另一较小的恒定速度。然而,应该认识到这个简化不是必要的,并在执行本发明中大都不被使用。对于这个简化,每个时间点t易于根据图9a和9b的图与透镜毛坯16的某一确定位置X、Y相联系。对图10表中的每一参数(研磨轮速度等)选择一个实际范围。

    该学习过程由将每个参数设置到其范围的起点并将标号i初始化为零开始(图11的块80)。然后将透镜毛坯16的位置Xi、Yi增量到下一个位置(i+1st),微处理机34询问火花传感器72,如果火花传感器72没有检测出玻璃透镜材料过热则将所有参数的当前值存储在图10的表中(图11的块82)。然后将研磨轮速度增量,微处理机34重复如前同样的询问和存储作业(块84)。下一步,将透镜旋转速度增量,微处理机34重复如前同样的询问和存储作业(块86)。然后将研磨力增量,微处理机34重复如前同样的询问和存储作业(块90)。

    在内循环中连续重复块90的步骤直到研磨力到达其范围的终端(块92),在该点将其重置到其范围的起点(块94)。然后,在外循环中连续重复块86的步骤,每个这样的重复包括一个完整的内循环周期性工作直到透镜旋转速度到达其范围的终点(块100),在该点将其重置到其范围的起点(块102)。下一步,连续重复块84的步骤,每个这样的重复以前述方式包括一个完整的内部和外部循环周期性工作直到研磨轮速度达到其范围的终点(块104),在该点将其重置到其范围的起点(块106)。

    如果透镜毛坯没有到达其移动的终点(块108),该过程返回到块82的步骤并重复它自己。否则(块108的YES分支),微处理机34开始分析在先前步骤中存储的数据(块110)。在块110的步骤中,微处理机34重查对于透镜毛坯16的轨迹中N个位置Xi、Yi的每一个位置所记录的所有参数组合。在每个位置处,微处理机确定哪个组合具有最高的研磨轮速度,并(仅仅)将该组合记录在图10表中ti的对应值处。

    图11的流程图示出根据本发明可实现的许多可能的试错学习过程之一。在图11的过程中,按照最大研磨轮速度简单地确定参数值的最佳组合,并使用了火花传感器。另外,也可使用其它方法来定义参数值的优化组合。作为另一替换,可用对表面光洁度的检测替代火花传感器72。当然,某些前述参数可取消或用别的等效参数替换。

    图11编程学习过程的一个优点是增大研磨轮10从玻璃透镜毛坯16中磨掉材料的速度也就增大了从毛坯16中带走热量的速度,从而研磨速度优化值的上限可比希望的高得多。然而,通常以32到250的透镜边缘的表面光洁度均方根为特征的可接受结果由约2,500RPM的研磨轮速度、20RPM的透镜旋转速度和30英寸/分的轴向透镜进料速度来获得。最好是,轮10的顶尖部分14的夹角为113°。

    最好是,微处理机34是熟知型号的AT计算机系统的一部分,其中微处理机通过一个盘驱动控制器82控制20兆字节的硬盘存储器80,通过一个视频控制器86控制监视器84。可通过AT键盘终端88将命令送入微处理机。存储器60、62和66是硬盘存储器80中单独的存储器单元。操作者可使用键盘终端88使微处理机34在监视器上显示关于图3系统执行的透镜磨边过程的信息。操作者也可使用键盘终端88开始或中断或修改该过程,例如允许通过调制解调器68接收新的透镜设计数据并存储在存储器80中,操作者也可使用键盘终端88命令微处理机开始图11的编程学习过程。最好是,图11的过程以存储在存储器80中的软件程序执行。

    尽管本发明已通过参照其特定的最佳实施例进行了详细说明,但应理解在不违背本发明的实质精神和范围的前提下可对其进行各种变型和改进。

    附录A

    '  This  program  prompts  user  for  radii  and  radii  locations

    '  Written  by  Jim  Pickett  December,1989

    '  Modified  by  Rory  Flemmer  November/December  1989.

    DEFINT  I-N

    DEFDBL  A-H,O-Z

    max=300

    DIM  x(max),y(max),r(max)

    CLS

    LOCATE  1,35:PRINT  "PROGRAM  NEWFILE"

    LOCATE  2,35:PRINT"-"

    FOR  i=1  TO  8

    READ  f$

    LOCATE  3+2*  i,15

    PRINT  f$

    NEXT  i

    DATA  "This  program  prompts  the  user  to  input  lens  shape  information."

    DATA  "The  data  is  read  from  B&L  style  blueprints  as  co-ordinates"

    DATA  "for  the  center  of  each  arc  and  then  its  radius"

    DATA  "Up  to  one  hundred  radii  can  be  used."

    DATA  "The  program  creates  a  file  with  a  name  selected  by  the  user"

    DATA  "The  program  adds  the  suffix  <.len>  to  the  filename  and  stores"

    DATA  "the  data  on  disc  in  the  current  directory."

    DATA  "The  program  provides  an  on-screen  editor"

    LOCATE  23,30:PRINT  "Hit  Any  Key  to  Continue."

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    CLS

    LOCATE  2,5

    PRINT  "Number  X-Location  Y-Location  Radius"

    LOCATE  21,1

    PRINT  "Enter  999,999,999  to  quit."

    i=0

    100

    i=i+1

    IF  i>max  THEN

    PRINT  "TOO  MANY  RADII  FOR  PROGRAM  MEMORY"

    GOTO  1000

    END  IF

    LOCATE  22,1

    IF  i<10  THEN

    PRINT  USING  "Enter  values  for  the  following:

    X(#),Y(#),Radius(#)";i;i;i

    ELSE

    FOR  i=0  TO  4095  STEP  10

    k=i+offset

    IF  k>4095  THEN  k=k-4096

    IF  k<0  THEN  k=k+4096

    j=i+t

    IF  j>4095  THEN  j=j-4096

    IF  j<0  THEN  j=j+4096

    x=r(j)  *  COS(theta(k))

    y=r(j)  *  SIN(theta(k))

    PSET  (x,y)

    IF  i  MOD  10=0  THEN

    x=rprs(i)  *  COS(thetaprs(i))

    y=rprs(i)  *  SIN(thetaprs(i))

    PSET(x,y)

    END  IF

    NEXT  i

    LOCATE  12,40:PRINT  CINT(t  *  360/4096);"degrees"

    LOCATE  23,1:PRINT"Input  desired  rotation  in  degrees-999  to  quit";

    INPUT  z

    IF  z=999  THEN  STOP

    WHILE  z?-;0

    z=z+360

    WEND

    WHILE  z>360

    z=z-360

    WEND

    t=t+z  *  4095/360

    IF  t<0  THEN  t=t+4096

    IF  t>4095  THEN  t=t-4096

    GOTO  redraw

    iendswitch=1

    END  IF

    ict=0

    FOR  N=istart  TO  iend

    ict=ict+1

    LOCATE  ict+3,2

    PRINT  USING  "###  ###.########  ###.########  ###.########";N;x(N);y(N);r(N)

    NEXT  N

    IF  iendswitch=1  THEN  GOTO  401

    VIEW  PRINT  21  TO  25

    LOCATE  21,1

    801  PRINT  "Enter  'C'  to  continue  display,'E'  to  edit  this  data,or  'Q'  to  quit."

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  UCASE$(a$)="C"  THEN  GOTO  501

    IF  UCASE$(a$)="E"  THEN  GOTO  401

    IF  UCASE$(a$)="Q"  THEN  GOTO  601

    CLS  2

    GOTO  801

    501  istart=iend+1

    iend=iend+15

    IF  iend>=i  THEN

    iend=i

    iendswitch=1

    END  IF

    VIEW  PRINT  1  TO  25

    CLS  2

    LOCATE  2,5

    PRINT  "Number  X-Location

    Y-Location  Radius"

    ict=0

    FOR  N=istart  TO  iend

    ict=ict+1

    LOCATE  ict+3,2

    PRINT  USING  "  ###

    ###.########  ###.########  ###.########";N;

    x(N);y(N);r(N)

    NEXT  N

    IF  iendswitch=1  THEN  GOTO  401

    LOCATE  21,1

    701  PRINT  "Enter  'C'  to  continue  display,'E'  to  edit  this  data,or  'Q'  to  quit."

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  UCASE$(a$)="C"  THEN  GOTO  501

    IF  UCASE$(a$)="E"  THEN  GOTO  401

    IF  UCASE$(a$)="Q"  THEN  GOTO  601

    GOTO  701

    Orient

    '  Written  by  Bill  Long  November/December  1989

    '  Modified  by  Rory  Flemmer  November/December  1989

    OPTION  BASE  0

    n=4095

    DIM  r(n),theta(n),rprs(n),thetaprs(n)

    SCREEN  2

    WINDOW  (-2.66,-2)-(2.66,2)

    CLS

    LOCATE  5,10:PRINT  "This  program  establishes  the

    Orientation  of  the  Lens  in  the  Pressing"

    LOCATE  6,10:PRINT"-

    -"

    LOCATE  10,10:PRINT  "The  program  requires  the  selection  of  a  known  lens  style"

    LOCATE  12,10:PRINT  "such  as  <style002>  and  a  pressing  style  such  as  <p55>"

    LOCATE  14,10:PRINT  "The  program  will  then  draw  the  lens  and  the  pressing  and  invite  the"

    LOCATE  16,10:PRINT  "user  to  specify  the  number  of  degrees  of  rotation,positive  or  negative"

    LOCATE  18,10:PRINT  "The  program  will  re-draw  the  lens  until  a  value  of  999  is  entered"

    LOCATE  22,10:PRINT  "Hit  any  key  to  continue  or  Q  to  quit"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  a$="q"  OR  a$="Q"  THEN  STOP

    CLS

    LOCATE  10,20:INPUT  "lens  style  please",s$

    CLS

    LOCATE  10,20:INPUT  "pressing  style  please",p$

    s$="style002"

    f$="p55"

    CLS

    LOCATE  12,20:PRINT  "Reading  and  manipulating  data"

    LOCATE  16,20:PRINT  "Please  be  patient  this  is  a  major  computational  effort"

    OPEN  s$+".cds"  FOR  INPUT  AS  #1

    OPEN  f$+".prs"  FOR  INPUT  AS  #2

    FOR  i=0  TO  4095

    INPUT  #1,r(i),theta(i),z

    INPUT  #2,rprs(i),thetaprs(i)

    NEXT  i

    FOR  i=0  TO  4095

    IF  theta(i)=0  THEN  offset=i

    NEXT  i

    redraw:

    CLS

    WINDOW(-2.66,-2)-(2.66,2)

    IF  i<100  THEN

    PRINT  USING  "Enter  values  for  the  following:X(##),Y(##),Radius(##)";i;i;i

    ELSE

    PRINT  USING  "Enter  values  for  the  following:X(###),Y(###),Radius(###)";i;i;i

    END  IF

    END  IF

    VIEW  PRINT  23  TO  25

    LOCATE  23,2

    INPUT;"",x(i),y(i),r(i)

    PRINT

    IF  x(i)=999  OR  y(i)=999  OR  r(i)=999  THEN

    i=i-1

    GOTO  200

    END  IF

    VIEW  PRINT  1  TO  25

    CLS

    LOCATE  2,5

    PRINT  "Number  X-Location  Y-Location  Radius"

    istart=1

    IF  i>16  THEN  istart=i-16+1

    ict=0

    FOR  N=istart  TO  i

    ict=ict+1

    LOCATE  ict+3,2

    PRINT  USING"###  ###.########  ###.########  ###.########";N;x(N);y(N);r(N)

    NEXT  N

    LOCATE  21,1

    PRINT  "Enter  999,999,999  to  quit."

    GOTO  100

    200  PRINT  "Is  all  data  correct  (Y  or  N)?(Y)"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    VIEW  PRINT  21  TO  25

    101  CLS  2

    LOCATE  21,2

    IF  UCASE$(a$)="N"THEN

    VIEW  PRINT  1  TO  25

    CLS

    LOCATE  2,5

    PRINT  "Number  X-Location  Y-Location  Radius"

    istart=1

    iend=i

    900  IF  i>16  THEN

    iend=16

    ELSE

    END  IF

    GOTO  601

    401  iendswitch=0

    VIEW  PRINT  21  TO  25

    CLS  2

    LOCATE  21,2

    PRINT  "ENTER  CHOICE"

    PRINT  "1-INSERT  A  LINE  3-DELETE  A  LINE"

    PRINT  "2-CHANGE  A  LINE  4-QUIT  EDITING"

    PRINT  "*  ANY  OTHER  ENTRY  WILL  RETURN  DISPLAY  TO  TOP  OF  FILE  *"

    iselect$=""

    WHILE  iselect$=""

    iselect$=INKEY$

    WEND

    IF  iselect$="1"  OR  iselect$="2"  OR  iselect$="3"  OR  iselect$="4"  THEN  GOTO  103

    GOTO  101

    103  IF  iselect$="1"  THEN  GOSUB  insert

    IF  iselect$="2"  THEN  GOSUB  change

    IF  iselect$="3"  THEN  GOSUB  delete

    IF  iselect$="4"  THEN  GOTO  102

    IF  iendswitch=1  THEN  GOTO  401

    IF  UCASE$(a$)="C"  THEN  GOTO  501

    IF  UCASE$(a$)="E"  THEN  GOTO  401

    IF  UCASE$(a$)="Q"  THEN  GOTO  601

    a$="N"

    GOTO  101

    102  CLS  2

    PRINT

    PRINT  "Is  all  data  correct  (Y  or  N)?(Y)"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  UCASE$(a$)="N"  THEN  GOTO  101

    601  VIEW  PRINT  21  TO  25

    CLS  2

    PRINT  "Enter  filename  under  which  to  save  data  or  RETURN  to  quit."

    INPUT;"",a1$

    'a$=""

    'WHILE  a$=""

    '  a$=INKEY$

    'WEND

    IF  a1$=""THEN

    PRINT  "Are  you  sure  you  wish  to  abort  edit  (Y  or  N)?(N)"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  UCASE$(a$)="Y"  THEN  GOTO  1000

    GOTO  200

    END  IF

    OPEN  "c:\buf\"+a1$+".len"  FOR  OUTPUT  AS  #1

    WRITE  #1,i

    FOR  n1=1  TO  i

    WRITE  #1,x(n1),y(n1),r(n1)

    NEXT  n1

    CLOSE  #1

    1000  CLS

    CLEAR

    VIEW  PRINT  1  TO  25

    '  CHAIN  "pulldwnl"

    END

    '-

    -

    insert:

    301  CLS  2

    LOCATE  21,2

    PRINT  "Line  to  be  inserted?"

    INPUT;"",iline

    IF  iline<1  THEN  GOTO  301

    IF  i+1>max  THEN

    PRINT  "TOO  MANY  RADII  FOR  PROGRAM  MEMORY"

    PRINT  "CHANGES  NOT  SAVED"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    GOTO  1000

    END  IF

    IF  iline>i  THEN

    iline=i+1

    ELSE

    FOR  n2=i  TO  iline  STEP-1

    SWAP  x(n2+1),x(n2)

    SWAP  y(n2+1),y(n2)

    SWAP  r(n2+1),r(n2)

    NEXT  n2

    '  iswitch=1

    '  number=i

    '  i=iline

    END  IF

    i=i+1

    LOCATE  22,1

    IF  iline<10  THEN

    PRINT  USING  "Enter  values  for  the  following:X(#),Y(#),Radius(#)";iline;iline;iline

    ELSE

    IF  iline<100  THEN

    PRINT  USING  "Enter  values  for  the  following:X(##),Y(##),Radius(##)";iline;iline;iline

    ELSE

    PRINT  USING  "Enter  values  for  the  following:X(###),Y(###),Radius(###)";iline;iline;iline

    END  IF

    END  IF

    VIEW  PRINT  23  TO  25

    LOCATE  23,2

    INPUT;"",x(iline),y(iline),r(iline)

    VIEW  PRINT  1  TO  25

    CLS

    LOCATE  2,5

    PRINT  "Number  X-Location  Y-Location  Radius"

    IF  iline<istart  THEN  istart=iline

    iend=iend+1

    IF  iline>iend  THEN  istart=iline

    iend=istart+15

    IF  iend>=i  THEN

    iend=i

    iendswitch=1

    END  IF

    ict=0

    FOR  N=istart  TO  iend

    ict=ict+1

    LOCATE  ict+3,2

    PRINT  USING"  ###  ###.########  ###.########  ###.########";N;x(N);y(N);r(N)

    NEXT  N

    VIEW  PRINT  21  TO  25

    LOCATE  21,1

    IF  iendswitch=1  THEN  RETURN

    751  PRINT  "Enter  'C'  to  continue  display,'E'  to  edit  this  data,or  'Q'  to  quit."

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    CLS  2

    IF  UCASE$(a$)<>  "Q"  AND  UCASE$(a$)  <>"C"  AND

    UCASE$(a$)<>  "E"  THEN  GOTO  751

    RETURN

    '-

    -

    change:

    CLS  2

    331  LOCATE  21,2

    PRINT  "Line  to  be  changed  ?"

    INPUT;"",iline

    IF  iline<1  OR  iline>i  THEN

    PRINT  "That  line  does  not  exist."

    GOTO  331

    END  IF

    CLS  2

    LOCATE  21,2

    PRINT  "Number  X-Location  Y-Location  Radius"

    PRINT  USING"###  ###.########  ###.########  ###.########";iline;x(iline);y(iline);r(iline)

    IF  iline<10  THEN

    PRINT  USING"Enter  values  for  the  following:X(#),Y(#),Radius(#)";iline;iline;iline

    ELSE

    IF  iline<100  THEN

    PRINT  USING"Enter  values  for  the  following:X(##),Y(##),Radius(##)";iline;iline;iline

    ELSE

    PRINT  USING"Enter  values  for  the  following:X(###),Y(###),Radius(###)";iline;iline;iline

    END  IF

    END  IF

    LOCATE  25,2

    INPUT;"",x(iline),y(iline),r(iline)

    VIEW  PRINT  1  TO  25

    CLS  2

    LOCATE  2,5

    PRINT  "Number  X-Location  Y-Location  Radius"

    IF  iline=iend  THEN

    istart=iend-15

    IF  istart<0  THEN  istart=0

    GOTO  222

    END  IF

    IF  iline<istart  THEN  istart=iline

    IF  iline>iend  THEN  istart=iline

    iend=istart+15

    IF  iend>=i  THEN

    iend=i

    iendswitch=1

    END  IF

    222  ict=0

    FOR  N=istart  TO  iend

    ict=ict+1

    LOCATE  ict+3,2

    PRINT  USING"  ###  ###.########  ###.########  ###.########";N;x(N);y(N);r(N)

    NEXT  N

    VIEW  PRINT  21  TO  25

    LOCATE  21,1

    IF  iendswitch=1  THEN  RETURN

    771  PRINT  "Enter  'C'  to  continue  display,'E'  to  edit  this  data,or  'Q'  to  quit."

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    CLS  2

    IF  UCASE$(a$)<>"Q"  AND  UCASE$(a$)<>"C"  AND  UCASE$(a$)<>"E"  THEN  GOTO  771

    RETURN

    '-

    -

    delete:

    CLS  2

    351  LOCATE  21,2

    PRINT  "Line  to  be  deleted  ?"

    INPUT;"",iline

    IF  iline<1  OR  iline  >i  THEN

    PRINT  "That  line  does  not  exist."

    GOTO  351

    END  IF

    x(iline)=0

    y(iline)=0

    r(iline)=0

    FOR  n2=iline  TO  i

    SWAP  x(n2+1),x(n2)

    SWAP  y(n2+1),y(n2)

    SWAP  r(n2+1),r(n2)

    NEXT  n2

    i=i-1

    VIEW  PRINT  1  TO  25

    CLS  2

    LOCATE  2,5

    PRINT  "Number  X-Location  Y-Location  Radius"

    IF  iline=iend  THEN  istart=iend-15

    IF  iline<istart  THEN  istart=iline

    IF  iline>iend  THEN  istart=iline

    iend=istart+15

    IF  iend>=i  THEN

    iend=i

    iendswitch=1

    END  IF

    ict=0

    FOR  N=istart  TO  iend

    ict=ict+1

    LOCATE  ict+3,2

    PRINT  USING"  ###  ###.########  ###.########  ###.########";N;x(N);y(N);r(N)

    NEXT  N

    VIEW  PRINT  21  TO  25

    LOCATE  21,1

    IF  iendswitch=1  THEN  RETURN

    761  PRINT"Enter  'C'  to  continue  display,'E'  to  edit  this  data,or  'Q'  to  quit."

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    CLS  2

    IF  UCASE$(a$)<>"Q"  AND  UCASE$(a$)<>"C"  AND  UCASE$(a$)<>"E"  THEN  GOTO  761

    RETURN

    '-

    -

    'Compute  pressing  data

    Written  by  Rory  Flemmer,November/December  1989.

    304-864  5568

    DEFSNG  A-Z

    OPTION  BASE  0

    CLS

    LOCATE  1,25:PRINT  "Program  PRESSING"

    LOCATE  2,25:PRINT  "-"

    FOR  i=1  TO  4

    READ  f$

    LOCATE  4+2*i,10

    PRINT  f$

    NEXT  i

    DATA  "This  program  requests  dimensions  of  the  pressing  in  inches"

    DATA  "It  uses  these  to  create  a  data  file  on  the  default  disc  in"

    DATA  "the  current  directory  called  <filename.prs>"

    DATA  "<filename>  is  a  name  with  not  more  than  8  letters,supplied  by  the  user"

    LOCATE  22,50:PRINT  "Hit  any  key  to  continue-Q  to  quit"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  a$="q"  OR  a$="Q"  THEN  STOP

    nn=4095

    pi=3.141593

    theta=0

    zinc=(pi+pi)/4096

    DIM  r(nn),theta(nn)

    CLS

    LOCATE  10,20:INPUT  "Enter  diameter  of  pressing-in.",z

    radius=z/2

    LOCATE  15,20:INPUT  "Enter  width  of  pressing-in.",z

    widt=z/2

    LOCATE  20,20:INPUT  "Please  enter  file  name,without  suffix-999  to  quit";f$

    IF  f$="999"  THEN  STOP

    OPEN  f$+".prs"  FOR  OUTPUT  AS  #1

    SCREEN  2

    WINDOW  (-2.66,-2)-(2.66,2)

    theta=-zinc

    FOR  i=0  TO  4095

    theta=theta+zinc

    IF  theta>pi/2  AND  theta<3*pi/2  THEN

    widt=-ABS(widt)

    ELSE

    widt=ABS(widt)

    END  IF

    yval=widt*TAN(theta)

    length=SQR(yval*yval+widt*widt)

    IF  length>radius  THEN  length=radius

    y=length*SIN(theta)

    x=length*COS(theta)

    PSET(x,y)

    WRITE  #1,length,theta

    NEXT  i

    LOCATE  23,1:PRINT"Pressing  data  computed  and  stored  as";f$+".PRS"

    '  Lensedge-written  by  Jim  Pickett,May  and  December,1989.

    '  Modified  by  R.L.C.  Flemmer,Jan  1990.

    '  builds  an  object  from  radii  and  centre  locations  in  *.len  file

    '  puts  edge  data  in  *.cds  file

    CLEAR

    '  $DYNAMIC

    DEFINT  I-N

    DEFDBL  A-H,O-Z

    CLS

    LOCATE  1,25:PRINT"Program  LENSEDGE"

    LOCATE  2,25:PRINT"-"

    FOR  i=1  TO  9

    READ  f$

    LOCATE  2+2*i,1

    PRINT  f$

    NEXT  i

    DATA  "This  program  reads  data  from  the  file  <filename.len>,created  by  NEWFILE."

    DATA  "It  prompts  the  user  for  <filename>  and  adds  the  suffix  <.len>.Its  function"

    DATA  "is  to  create  a  data  file  which  specifies  information  for  the  edge  of  the"

    DATA  "style  under  consideration.The  file  is  stored  on  the  default  disc"

    DATA  "in  the  current  directory"

    DATA  ""

    DATA  "<filename>.cds  contains  4096  data  triples.Each  of  the  4096  triples  gives"

    DATA  "values  for  the  angle  (radians),radius  at  that  angle  (thousandths  of  an  inch"

    DATA  "and  offset  due  to  the  6  diopter  curvature  (thousandths  of  an  inch"

    LOCATE  23,20:PRINT  "Hit  any  key  to  continue-q  to  quit"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  a$="q"  OR  a$="Q"  THEN  STOP

    CLS

    FOR  i=1  TO  5

    READ  f$

    LOCATE  5+2*i,5:PRINT  f$

    NEXT  i

    DATA  "The  program  initially  calculates  the  lens  edge  from  the  data  in"

    DATA  "<filename.len>.During  this  process  it  draws  out  the  lens  on  the  screen."

    DATA  ""

    DATA  "Thereafter  it  interpolates  this  data  to  provide  data  at  4096  equal"

    DATA  "increments  of  angle.During  this  process,it  re-draws  the  lens."

    LOCATE  23,20:PRINT  "Hit  any  key  to  continue-q  to  quit"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    IF  a$="q"  OR  a$="Q"  THEN  STOP

    CLS

    PRINT  "Input  lens  style  file.(Include  directory  and  path)":PRINT

    INPUT:"",a1$:PRINT

    OPEN  a1$+".len"  FOR  INPUT  AS  #1

    GOTO  20

    10  CLS

    PRINT  "There  is  no  lens  file";a1$;"found."

    PRINT  "Please  input  a  file  which  is  present.(Include  directory  and  path)":PRINT

    INPUT;"",a1$:PRINT

    OPEN  a1$+".len"  FOR  INPUT  AS  #1

    20  'OPEN  a1$+".cnc"  FOR  OUTPUT  AS  #2

    dioptres=6

    diop=(1000#/6)/25.4#

    pi=3.141592653589793#

    pid2=pi*.5

    pi2=pi*2

    pid180=pi/180

    ipts=4096

    igain=20000

    offset=-2.5

    INPUT  #1,num

    n=5200

    DIM  x(num),y(num),rad(num),xstart(num),ystart(num),xx(n),yy(n),xxx(n),yyy(n)

    CLS

    FOR  i=1  TO  num

    INPUT  #1,x(i),y(i),rad(i)

    NEXT  i

    CLOSE  #1

    SCREEN  2

    WINDOW  (-1.5,-1.2)-(1.5,1.2)

    LOCATE  1,36

    PRINT  a1$

    LINE  (-10,0)-(10,0)

    LINE  (0,-10)-(0,10)

    a1=x(num)

    b1=y(num)

    r1=rad(num)

    aa1=a1

    bb1=b1

    rr1=r1

    FOR  i=1  TO  num

    a2=x(i)

    b2=y(i)

    r2=rad(i)

    aa1=a2

    bb1=b2

    rr1=r2

    GOSUB  findintersection

    xstart(i)=xmin

    ystart(i)=ymin

    CIRCLE  (xmin  *  70,ymin  *  70),1,12

    a1=a2

    b1=b2

    r1=r2

    aa1=a1

    bb1=b1

    rr1=r1

    NEXT  i

    count=0

    ymin=.1

    FOR  i=1  TO  num

    xbegin=xstart(i)

    ybegin=ystart(i)

    IF  i+1>num  THEN

    xend=xstart(1)

    yend=ystart(1)

    ELSE

    xend=xstart(i+1)

    yend=ystart(i+1)

    END  IF

    zcrement=.001

    IF  xbegin>xend  THEN  zcrement=-.001

    FOR  zj=xbegin  TO  xend  STEP  zcrement

    count=count+1

    arg=rad(i)*rad(i)-(zj-x(i))*(zj-x(i))

    IF  arg<0  THEN

    PRINT  arg

    IF  arg?-;01  THEN

    LOCATE  2,1

    PRINT  "flag2"

    GOTO  111

    ELSE

    arg=0

    END  IF

    END  IF

    root=SQR(arg)

    y1=y(i)+root

    y2=y(i)-root

    IF  ABS(y1-yend)<ABS(y2-yend)THEN

    yy=y1

    ELSE

    yy=y2

    END  IF

    IF  zj=xbegin  AND  ABS(yy-ybegin)>.05  THEN

    GOSUB  interpolate

    count=count+1

    xi=zj

    yi=yy

    PSET(zj,yy),i

    xx(count)=zj:yy(count)=yy

    ELSE

    xi=zj

    yi=yy

    PSET(zj,yy),i

    xx(count)=zj;yy(count)=yy

    END  IF

    111  NEXT  zj

    NEXT  i

    CLOSE  #1

    PAINT  (0,0),1

    GOSUB  getlensdata

    1  LOCATE  23,1

    PRINT  "PRESS  ANY  KEY  TO  CONTINUE"

    a$=""

    WHILE  a$=""

    a$=INKEY$

    WEND

    CLS

    SCREEN  2

    CLEAR

    VIEW  PRINT  1  TO  25

    END

    '-

    -

    findintersection:

    slope=(b2-b1)/(a2-a1)

    bcept=b2-slope*a2

    aaa=1+slope*slope

    bbb=2*slope*(bcept-b1)-2*a1

    ccc=a1*a1+(bcept-b1)*(bcept-b1)-r1*r1

    arg=bbb*bbb-4*aaa*ccc

    denom=1/(2*aaa)

    root=SQR(arg)

    x1=(-bbb+root)*denom

    x2=(-bbb-root)*denom

    y1=x1*slope+bcept

    y2=x2*slope+bcept

    diff1=(x1-a1)*(x1-a1)+(y1-b1)*(y1-b1)-r1*r1

    diff2=(x2-a1)*(x2-a1)+(y2-b1)*(y2-b1)-r1*r1

    diff3=(x1-a2)*(x1-a2)+(y1-b2)*(y1-b2)-r2*r2

    diff4=(x2-a2)*(x2-a2)+(y2-b2)*(y2-b2)-r2*r2

    IF  ABS(diff1-diff3)>ABS(diff2-diff4)  THEN

    xmin=x2

    ymin=y2

    ELSE

    xmin=x1

    ymin=y1

    END  IF

    RETURN

    '-

    -

    interpolate:

    count=count-1

    xend1=xend

    ybegin1=ystart(i)

    yend1=yy

    zcrement2=.001

    IF  ybegin1>yend1  THEN  zcrement2=-.001

    FOR  zjj=ybegin1  TO  yend1  STEP  zcrement2

    count=count+1

    arg=rad(i)*rad(i)-(zjj-y(i))*(zjj-y(i))

    IF  arg<0  THEN

    IF  arg?-;01  THEN

    PRINT  "flag2"

    GOTO  112

    ELSE

    arg=0

    END  IF

    END  IF

    root=SQR(arg)

    x1=x(i)+root

    x2=x(i)-root

    IF  ABS(x1-xend1)<ABS(x2-xend1)  THEN

    xx=x1

    ELSE

    xx=x2

    END  IF

    xi=xx

    yi=zjj

    'GOSUB  calangle

    'radius=rad(i)+wheel

    'xx(count)=x(i)+radius*COS(angle)

    'yy(count)=y(i)+radius*SIN(angle)

    'PSET(xx(count)*70,yy(count)*70)

    'xx(count)=zj:yy(count)=yy

    y11=yy(count)

    IF  y11<ymin  AND  y11>0  AND  xx(count)>0

    THEN

    ymin=y11

    ipos=count

    END  IF

    PSET(xx,zjj),i

    xx(count)=xx:yy(count)=zjj

    xend1=xx

    112

    NEXT  zjj

    RETURN

    '-

    -

    calangle:

    x2i=x(i)

    y2i=y(i)

    IF  xi=x2i  THEN

    IF  yi<y2i  THEN

    angle=pid2+pi

    ELSE

    angle=pid2

    END  IF

    GOTO  30

    END  IF

    angle=ATN((y2i-yi)/(x2i-xi))

    IF  xi<x2i  THEN

    angle=pi+angle

    END  IF

    IF  xi>x2i  AND  yi<y2i  THEN

    angle=2*pi+angle

    END  IF

    30  RETURN

    '-

    -

    getcncdata:

    iwatch=0

    IF  ipos+1>count  THEN

    y2=yy(1)

    x2=xx(1)

    ELSE

    y2=yy(ipos+1)

    x2=xx(ipos+1)

    END  IF

    IF  y2<yy(ipos)  THEN

    x3=xx(ipos)-yy(ipos)*(xx(ipos)-x2)/(yy(ipos)-y2)

    ELSE

    IF  ipos-1<1  THEN

    y2=yy(count)

    x2=xx(count)

    ELSE

    y2=yy(ipos-1)

    x2=xx(ipos-1)

    END  IF

    x3=xx(ipos)-yy(ipos)*(xx(ipos)-x2)/(yy(ipos)-y2)

    END  IF

    radius=x3

    y3=0

    theta=0

    newradius=(radius+offset)*igain

    WRITE  #2,newradius

    dtheta=360/4096*pid180

    theta=0

    ict=ipos

    angle=0

    FOR  irad=2  TO  ipts

    IF  irad=4094  THEN  STOP

    theta=theta+dtheta

    WHILE  angle<theta

    ict=ict+1

    IF  ict>count  THEN

    ict=1

    iwatch=1

    END  IF

    angle2=angle

    radius2=radius

    GOSUB  calangle2

    WEND

    rad=radius+((theta-angle)/(angle2-angle))*(radius2-radius)

    x3=rad*COS(theta)

    y3=rad*SIN(theta)

    newradius=(rad+offset)*igain

    'WRITE  #2,newradius

    ''  LINE(0,0)-(x3*70,y3*70),14

    NEXT  irad

    'close  #2

    RETURN

    '-

    -

    calangle2:

    xict=xx(ict)

    yict=yy(ict)

    IF  xict=0  THEN

    IF  yict<0  THEN

    angle=pid2+pi

    ELSE

    angle=pid2

    END  IF

    GOTO  330

    END  IF

    angle=ATN(yict/xict)

    IF  xict<0  THEN

    angle=pi+angle

    END  IF

    IF  irad=ipts  THEN

    IF  xiot>0  AND  yict>0  THEN

    angle=2*pi+angle

    END  IF

    END  IF

    IF  iwatch=1  THEN  angle=angle+pi2

    radius=SQR(yict*yict+xict*xict)

    330  RETURN

    '-

    -

    getlensdata:

    CLS

    OPEN  a1$+".cds"  FOR  OUTPUT  AS  #3

    LOCATE  1,36

    PRINT  a1$

    WINDOW  (-1.5,-1.2)-(1.5,1.2)

    LINE(-1.5,0)-(1.5,0)

    LINE(0,-1.2)-(0,1.2)

    '(1.11,.35)-(1.14,.4)

    n=1:zinc=2*pi/4096:iflag=0

    ng=1:GOSUB  gettan

    zlastangle=angle

    zn=angle

    xxx(1)=xx(1);yyy(1)=yy(1)

    rad=SQR(xxx(1)*xxx(1)+yyy(1)*yyy(1))

    altitude=diop-SQR(diop*diop-rad*rad)

    WRITE  #3,CSNG(rad),CSNG(angle),CSNG(altitude)

    nguess=1

    top:

    n=n+1

    IF  n>4096  THEN  RETURN

    IF  n>2000  THEN  iflag=1

    znextangle=zlastangle+zinc

    angle=zn

    WHILE  angle<znextangle

    nguess=nguess+1

    IF  nguess>5008  THEN  nguess=nguess-5008

    ng=nguess

    GOSUB  gettan

    WEND

    'IF  angle>pi+pi  THEN  angle=angle-pi-pi

    '  LOCATE  1,1:PRINT  nguess,zlastangle,znextangle,angle

    zn=angle

    yyy:

    ng=nguess-1:GOSUB  gettan

    WHILE  angle=zn

    ng=ng-1

    GOSUB  gettan

    WEND

    z1=angle

    ngless=nguess-1

    IF  ngless<1  THEN  ngless=ngless+5008

    xxx(n)=xx(ngless)+(znextangle-zl)/(zn-zl)*(xx(nguess)-xx(ngless))

    yyy(n)=yy(ngless)+(znextangle-zl)/(zn-z1)*(yy(nguess)-yy(ngless))

    rad=SQR(xxx(n)*xxx(n)+yyy(n)*yyy(n))

    theta=znextangle

    altitude=diop-SQR(diop*diop-rad*rad)

    WRITE  #3,CSNG(rad),CSNG(theta),CSNG(altitude)

    'LOCATE  1,1:PRINT  rad,theta,altitude

    zlastangle=znextangle

    'PRINT  n,znextangle*360/2/pi

    PSET  (xxx(n),yyy(n))

    GOTO  top

    RETURN

    '-

    gettan:

    'IF  ng>5003  THEN  STOP

    IF  ng>5008  THEN  ng=ng-5008

    IF  ng<1  THEN  ng=ng+5008

    IF  xx(ng)>=0  AND  yy(ng)>=0  THEN  quad=1

    IF  xx(ng)<=0  AND  yy(ng)>=0  THEN  quad=2

    IF  xx(ng)>=0  AND  yy(ng)<=0  THEN  quad=3

    IF  xx(ng)>=0  AND  yy(ng)<=0  THEN  quad=4

    SELECT  CASE  quad

    CASE  1

    angle=ATN(yy(ng)/xx(ng))

    CASE  2

    angle=pi-ABS(ATN(yy(ng)/xx(ng)))

    CASE  3

    angle=pi+ATN(yy(ng)/xx(ng))

    CASE  4

    angle=pi+pi-ABS(ATN(yy(ng)/xx(ng)))

    END  SELECT

    IF  angle<0  THEN  STOP

    IF  iflag=1  AND  angle<1  THEN  angle=angle+2*pi

    RETURN

可编程控制进料和速度的透镜磨边系统.pdf_第1页
第1页 / 共51页
可编程控制进料和速度的透镜磨边系统.pdf_第2页
第2页 / 共51页
可编程控制进料和速度的透镜磨边系统.pdf_第3页
第3页 / 共51页
点击查看更多>>
资源描述

《可编程控制进料和速度的透镜磨边系统.pdf》由会员分享,可在线阅读,更多相关《可编程控制进料和速度的透镜磨边系统.pdf(51页珍藏版)》请在专利查询网上搜索。

一种用于对透镜磨边的计算机数控机系统根据存在存储器中的透镜形状控制透镜工件相对于磨边工具的旋转和位移。该系统将透镜工件连续轴向平移过磨边轮的表面以便使磨损均匀分布在磨边轮表面,从而减少对磨边轮修整的要求。该系统将透镜尺寸与预定尺寸相比较并通过在对连续透镜工件磨边期间自动调整透镜轨迹来补偿其任何差值,从而允许磨边轮磨损而没有明显的透镜尺寸误差。该系统在整个透镜磨边操作期间的每个离散点上控制磨边工具的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 作业;运输 > 磨削;抛光


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1