用于可编程序逻辑控制器的脉冲输出功能
相关申请的交叉引用
本申请要求下列待审临时申请的优先权,并且在此全部引入作为参考:2002年1月7日提交的编号为60/346,488(代理人号No.2002P00150)。
附图简述
参考附图,经由以下某些典型实施例的详细说明,可以容易地理解本发明及其可能的实施例的广义范围,在这些附图中:
图1是本发明方法1000的典型实施例的流程图;
图2是本发明系统2000的典型实施例的方框图;
图3是本发明信息装置3000的典型实施例的方框图;
图4是本发明典型运动模块的高速缓冲存储器工作情况(behavior)的典型实施例的方框图;
图5是本发明典型运动模块的一个参考点查找图表;
图6是本发明典型运动模块的一个参考点查找图表;
图7是本发明典型运动模块的一个参考点查找图表;
图8是本发明典型运动模块的一个参考点查找图表;
图9是本发明典型运动模块的两个参考点查找图表;
图10是示出了本发明典型运动模块的灯的典型布局和标记的方框图;
图11是示出用于本发明典型运动模块的各输入输出以及相关联的用户电源端子的典型电路的电路图;
图12是用于所述运动模块的典型实施例的脉冲输出发生框图;
图13是用于本发明典型实施例的频率-时间图;
图14是用于本发明典型实施例的频率-时间图;
图15是用于本发明典型实施例的频率-时间的S曲线图。
详细说明
本发明的至少一个典型实施例包括一种方法,所述方法包括获取第一位置、第二位置以及用于在第一位置和第二位置之间的移动的最大运动参数。所述方法还包括创建一种包括用于所述运动的多个目标频率的数值表,所述数值表还包括与所述多个目标频率中的每一个目标频率相对应的脉冲宽度、脉冲计数以及差分脉冲宽度。所述方法还包括从脉冲发生器输出所述数值的至少一部份。
本发明的至少一个典型实施例包括一种方法,所述方法包括获取第一频率和第二频率。所述方法还包括创建一种包括位于第一和第二频率中间的多个目标频率的数值表,所述数值表还包括与所述多个目标频率中的每一个目标频率相对应的脉冲宽度、脉冲计数以及差分脉冲宽度。所述方法还包括将所述数值的至少一部份输出到一个运动装置。所述方法还可以包含通过因特网发送所述数值的至少一部份。
本发明的至少一个典型实施例包括一个装置,所述装置包括一个子增量时钟计数导出脉冲发生器。本发明的至少一个典型实施例包括一装置,所述装置包括一个适合于通过在预先计算出的中间脉冲输出频率之间内插从而产生从第一脉冲输出频率到第二频率的变化的脉冲发生器,每一脉冲的宽度根据在加速和减速期间时钟计数的实时子增量相加导出。
本发明的至少一个典型实施例包括一个系统,所述系统包括一个算术逻辑单元。所述系统还包括一个存储器,所述存储器通过管道机制连接到所述算术逻辑单元,该存储器包括一个预先计算的表,表中有目标脉冲宽度、脉冲宽度变化以及按照约束的半对数分布而分布的脉冲计数。所述系统进一步地包括一状态机,其适于将每个所述目标脉冲宽度和脉冲宽度变化以预先确定的脉冲计数间隔从所述存储器加载到所述算术逻辑单元中,同时保持对由所述算术逻辑单元产生的脉冲宽度的控制。
图1是本发明方法1000的典型实施例的流程图。在某些实施例中,可以连同对运动装置起作用的脉冲发生器一起使用方法1000。运动装置可以是由一可变频率脉冲列控制的任何装置,包括:例如步进马达控制器、伺服控制器、致动器控制器等等这样的运动控制器;例如步进器驱动器、伺服驱动器等等这样的运动驱动器;和/或例如步进马达、伺服马达、线性马达、马达、滚珠螺杆、伺服阀、液压致动器、气动阀等等这样的致动器。可以看出,脉冲发生器能产生称作脉冲列的一系列脉冲。根据本发明的某些实施例,一可变频率脉冲发生器产生能在频率、计数、宽度、和/或差分宽度(在此也称为″脉冲宽度的变化″)方面变化的脉冲列。在所述运动装置处,所述脉冲列的频率可以控制速度并且/或者所述脉冲计数可以控制位置。
在活动(activity)1100,可以由所述脉冲发生器的一用户创建一运动控制轮廓(profile)。所述用户可以提供期望的成角度的和/或线性的行进距离以及通过这一距离的速度。
在某些实施例中,所述用户可以提供最大速度、最大加速度、加速度相对于时间的最大变化(有时称作“最大加速度率(jerk)”或规定为“最大加速度率时间(jerk time)”)和/或最大加速度率相对于时间的最大变化。用户可以确定地和/或经验地确定这些值以实现所期望的机器运动和/或避免非所期望的结果,比如马达停转、马达滑动或其它的运动装置问题(例如过度压力、在传送物品和运输带之间的摩擦损失、液体的急冲(flinging)等等)。
作为响应,可以提供一个运动控制轮廓。在某些实施例中,所述运动控制轮廓可以在位置-时间曲线图上为运动装置指出所期望的位置和时间。在其它的实施例中,所述运动控制轮廓可以在频率-时间曲线图上指出所期望的运动装置的频率斜率。这样的一种运动控制轮廓可以包括频率的开始和结束,并且可以是直线的、曲线的或是在所述频率之间的直线和曲线部分的组合。在有些情况下,可以根据用户的输入,所述运动控制轮廓可以反映出一条S曲线,其中从开始频率的″起飞″逐渐地在频率变化上斜升,而到结束频率的″降落″在频率变化上逐渐地斜降,以避免在接近开始和结束频率处的频率突变。所述运动控制轮廓例如可以被存储为一种时间-频率点的表。其它可能的曲线可以包括位置-脉冲计数、频率-脉冲计数、速度-时间、速度-位置、加速度-时间、加速度-脉冲计数、加速度-位置、加速度-频率、和/或加速度-速度。注意:一个运动控制轮廓可以明确地提供某些运动参数,并且可以暗示其它的运动参数。例如,一个运动控制轮廓可以明确地描述一开始位置、一终点位置以及在开始和终点位置之间运动发生的时间,其中隐含地描述运动的平均速度。
在活动1200,所述运动控制轮廓可以被存储在比如一个存储器中,以供以后检索。在活动1300,例如可以通过一种可编程序逻辑控制器(“PLC”)的脉冲发生器模块的运动控制处理器来获取所述运动控制轮廓。
在活动1400,所述运动控制处理器可以加载来自所述运动控制轮廓的第一和第二频率,并且可以计算多个中间频率。所述运动控制处理器可以设法调整所述每个脉冲的脉冲宽度,以便实现所述频率(与速度相对应)、加速度、和/或特定应用的加速度规范的变化,而同时满足中间的和/或总的脉冲计数(与距离相对应)的规范。因为每个脉冲具有有限的宽度,并且因为脉冲宽度可以在脉冲列之内变化,所以在当前的典型的应用中,对脉冲宽度新值的需求可以从每秒几次到每秒几十万或几百万次。
对于一种打算供给大范围终端使用需求的运动控制处理器来说,适当的运动参数的范围(例如,频率、加速度、时间、和/或距离等等)可以由浮点值表示和计算,和/或以一种具有许多有效位的万用定点格式表示。在本发明的某些实施例中,可以在需要前计算所述值并保存在存储器中以供检索和实时使用。
本发明的至少一个实施例可以在运动开始之前计算与介于所述运动控制轮廓的第一和第二频率值之间的多个频率相关联的值(例如脉冲宽度、脉冲宽度的变化和/或脉冲数等等),并且可以将所述值存储在存储器中。在执行所述运动期间,可以以预先确定的脉冲计数间隔从存储器处取出这些值。在所述间隔期间、在取出的值之间所发出的各脉冲的脉冲宽度可以被计算为在每一脉冲的脉冲宽度方面的简单的线性相加,同时实时完成在与多个中间频率相关联的脉冲宽度的预计算值之间的内插。
当计算时间相对自由时,在所述运动开始之前的数值计算可以使用处理器而允许所述计算达到期望的精度水平,所述处理器在大小、成本和/或功率方面受到限制。与足够分散的多个中间频率相关联的数值计算可以允许将预计算的数据存储在存储器中,所述存储器在大小、成本和/或功率方面受限制。在某些情况下,通过在所述预计算出的点之间的一种简单的加法内插而改变每一脉冲宽度可以比仅仅通过使用多个中间频率得到更接近所期望的运动控制轮廓的近似,同时限制了对于每一脉冲发生时要求一个可用新值的计算装置的成本、尺寸和/或功率。
如果一个脉冲被定义为包括逻辑″1″和逻辑″0″的这样一个周期的事件,那么将一个定值简单的加入到每一脉冲的所述脉冲宽度会产生一个在频率方面的非线性变化,因为频率是脉冲宽度的倒数。将一定值持续的加入到所述脉冲宽度可以相对于时间在频率方面产生一显著地曲线变换,其具有在低频区小的加速度和在高频区大的加速度。为了实现所期望的遵循于特定的频率轮廓,可以控制在多个中间频率之间的所述间隔,从而控制通过将常数加入到所述脉冲宽度所产生的曲率。在轮廓的恒定加速区,所述曲率在频率的下限值更为明显。通过根据半对数行进(progression)来分配在许多频率的点之间的间隔,(或相当于,以前一频率的预定百分比提高每个递增频率的间隔),可以实现一种点的分配,借此更多点被放置在所述频率的下限值处,其中要求更加注意到曲率控制,因此与借助于在时间上平均分配的点相比,使用了较少的点而实现了遵循所述轮廓的期望水平。
完全遵循此一半对数点分布可能导致在频率变化区的高频率部分有很少的点。对于包括加速度受控的变化(S曲线、或受控的″jerk″)的频率轮廓,在高频率区可以包括充足的点以便描述——在所期望的精确度水平下——在大加速度区和小加速度区或无加速度(等速)区之间的所期望的受限的加速度变化。因此,可以约束(constrain)或限制在由半对数行进暗示的预计算出的频率点之间的递增间隔,以便以某一与表示期望用于S曲线(或受限加速度的情形)的曲率的预期范围一致的最大间隔提供各点。
进一步地,对点之间的最小间隔可能有实际极限,这例如是由加载一组新值所需的处理器中断响应时间所要求的,和/或是当可实现的间隔大于当前脉冲宽度时所要求的。因此,由所述半对数分布计算出的间隔可能被检验并且适当地约束为不小于由实现系统约束所确定的某一最小量。
通过计数出某一高频率主时钟的时钟事件的整数可以产生每一脉冲宽度,所述时钟事件的数量可以是脉冲宽度值的存储表示,并且通过给所述当前值增加一正数或负数可以产生脉冲宽度的变化。为了以所期望的精确度水平实现所期望的频率范围、加速度和/或脉冲计数,本发明的至少一个实施例可以以一个时钟事件的整数和一个时钟事件的子整数或分数部分表示脉冲宽度的变化。尽管不必以每一所实现的脉冲宽度的非整数个时钟事件来表示时钟事件的分数部分,但是该分数部分却可以累积在用于指定内插间隔的每一脉冲宽度变化的相加上。如果分数或子整数部分的累积超过一整数值,那么该整数值可以变成每一脉冲宽度的整数时钟时间的表示数值的一部分。
在活动1500,可以调节任何一个或所有计算值以符合预定的运动约束和/或参数。为此应用,运动约束可能包括对下列各项的约束:频率、频率相对于时间的一阶导数和/或频率相对于时间的二阶导数。运动约束还可以包括对下列各项的约束:成角度的和/或线性的位置、速度、加速度、最大加速度率(加速度相对于时间的一阶导数)和/或加速度相对于时间的二阶导数。注意:使用预定的时间差分值(增量)可以近似那些表示为导数的约束。例如:最大加速度率可以被近似为最大容许加速度值除以选择的时间增量。作为另一个例子,可以遵循规定的最小运动时间。
运动约束可以在运动控制轮廓的任何区域应用。例如,当最初开始变化步进马达轴的位置时,为了避免诸如滑动这样的潜在问题,最大加速度率可能被限于一预定数量,比如0.01弧度每秒3或0.01毫米每秒3。
在活动1600,可以以所述计算值和/或调整值填充一个表。该表的每一行可以包含不同的中间频率,每一中间频率具有相应的脉冲宽度、脉冲宽度的变化、和/或脉冲计数。两个邻近行可以被认为包含一邻近的中间频率对。
在活动1700,可以通过PLC的脉冲发生器读取所述表以输出一脉冲列。可以将表值提供给所述脉冲发生器的运动控制处理器,其可以包含一管道机制、一算术逻辑单元(″ALU″)和/或一控制状态机。对于指示数目的脉冲,所述ALU可以通过给每一连续脉冲宽度值添加一个所提供的正或负的脉冲宽度变化来提供插入的脉冲宽度中间值。所述ALU可以添加表示主时钟事件的一个整数和一个非整数或分数的值,在多脉冲宽度累积分数,直到这样的累积超过整数并且并入所述脉冲宽度为止。所述状态机以预定的间隔支配对读取所述表和输出所述脉冲列的控制,所述间隔可以被无限期地延迟、中断、和/或由命令和/或外部事件再启动而同时保持对脉冲宽度的控制。
在活动1800,可以将所述脉冲列提供到一运动装置。脉冲列可以经由到所述脉冲发生器的直接连接,和/或经由诸如因特网连接这样的网络接线加以提供。所述脉冲列可以作为数字或模拟信号而加以提供。
图2是本发明系统2000的典型实施例的方框图。系统2000可以包括一可编程序逻辑控制器(″PLC″)2100,所述PLC包括一经由连接器2130耦合到脉冲发生器2140的主处理器。在某些实施例中,脉冲发生器2140可以连接到一诸如系统背板这样的连接器2300和/或PLC2100的扩展输入/输出总线。
脉冲发生器2140可以集成到PLC2100。也就是说,一旦安装,脉冲发生器2140就是PLC1100的一元件,而不是独立式的。脉冲发生器2140可以包括一具有诸如双端口RAM这样的存储器2160的运动处理器2150。运动处理器2150可以是可买到的通用微处理器。在另一个实施例中,运动处理器2150可以是专用集成电路(ASIC),所述ASIC被设计为以其硬件和/或固件实现根据本发明的实施例的方法的至少一部分。另一个实施例中,运动处理器2150可以是现场可编程门阵列(FPGA)。
存储器2160可以包含实现为软件的指令,其可以采用本领域人所共知的众多形式中的任何形式。脉冲发生器2140同样可以包括诸如总线、连接器、电话线接口、无线网络接口、蜂窝网络接口、局域网接口、宽带电缆接口等等之类的通信接口2170。
脉冲发生器2140可以连接到一与PLC 2100相分开的运控制器2300。运动控制器2300可以连接到一运动驱动器和/或一致动器2400。脉冲发生器2140同样可以经由网络2500连接到一与PLC 2100分离的运动控制器2600。网络2500可以是公共交换电话网(PSTN)、无线网络、蜂窝网络、局域网、因特网等等。运动控制器2600可以连接到一运动驱动器和/或一致动器2700。进而,脉冲发生器2140可以连接到一与PLC 2100集成到一起的运动控制器2180。运动控制器2180可以连接到一运动驱动器和/或一致动器2200。
信息装置2900同样可以连接到网络2500,该信息装置比如是传统的电话、电话装置、蜂窝式电话、移动终端、蓝牙装置、发报机、传呼机、传真机、计算机终端、个人电脑等等。信息装置2900可用于编程脉冲发生器2140、与脉冲发生器2140相互作用和/或监控脉冲发生器2140。
图3是本发明信息装置3000的典型实施例的方框图。信息装置3000可以表示图2中的信息装置2900。信息装置3000可以包括众所周知的元件,比如一个或多个网络接口3100、一个或多个处理器3200、一条或多条包含指令3400的存储器3300和/或一个或多个输入/输出(I/O)装置3500等等。
在一个实施例中,网络接口3100可以是电话、蜂窝电话、蜂窝式调制解调器、电话数据调制解调器、传真调制解调器、无线收发机、以太网卡、电缆调制解调器、数字用户线路接口、桥接器、网络集线器、路由器或其它的类似装置。
每一处理器3200可以是可买到的通用微处理器。在另一个实施例中,该处理器可以是专用集成电路(ASIC)或现场可编程门阵列(FPGA),所述ASIC和FPGA被设计为以其硬件和/或固件至少实现根据本发明的实施例的方法的一部分。
根据本发明的方法的一个或多个步骤,存储器3300可以耦合到一处理器3200并且可以存储适合于由处理器3200执行的指令3400。存储器3300可以是能够存储模拟或数字信息的任何装置,比如硬盘、随机存取存储器(RAM)、只读存储器(ROM)、闪速存储器、高密度磁盘、数字多用盘(DVD)、磁带、软盘以及它们的任何组合。
指令3400可以以软件实现,其可以采用本领域人所共知的众多形式中的任何形式。
任何输入/输出(I/O)装置3500可以是音频和/或视频装置,例如包括监视器、显示器、键盘、袖珍键盘、触摸板、定向设备、麦克风、扬声器、摄像机、照相机、扫描仪和/或打印机,其包括一个输入输出装置可以附于或连接到的端口。
本发明的某些典型实施例包括一位置或运动模块,它将PLC经由一步进驱动控制器连接到步进马达。此模块的某些典型实施例有时在此是指EM 253运动模块。在此所述PLC的某些典型实施例有时指S7-200。在此所述步进马达的某些典型实施例有时指Simostep P50马达。在此所述步进驱动控制器的某些典型实施例有时指Simostep调频步进驱动器。
EM253运动模块的特征
所述EM 253运动模块可以将它本身确定为一S7-200智能模块并且可以用于与例如本文中说明的单轴步进马达连接而提供本机输入与输出。
经由所述扩展I/O总线,可以在所述模块和S7-200PLC之间执行通讯。可以提供适当的硬件以便支持由PLC或者所述模块启动的通讯。
所述EM253运动模块可以为运动控制提供从每秒12脉冲数(pps)到每秒200k脉冲数(pps)的脉冲输出。如果脉冲频率的跨度不能作为单个范围而被提供,那么所述模块固件可以基于在模块配置中指定的最高速度而自动地选择工作范围。所述模块可以根据最大速度(MAX_SPEED)计算该范围的最小速度(MIN_SPEED)。下面的范围可以得到支持:
速度范围 |
MIN_SPEED |
MAX_SPEED达2Kpps |
12pps |
MAX_SPEED达10Kpps |
60pps |
MAX_SPEED达50Kpps |
300pps |
MAX_SPEED达200Kpps |
1200pps |
与EM253运动模块的编程接口
所述S7-200编程软件可以提供三种功能以帮助模块配置、轮廓创建、和模块操作(控制和状态监视)。
所述配置功能可以提示用户输入所需参数。接着所述轮廓创建功能可以提示用户对于每一移动轮廓的必要信息。随后用于每一移动轮廓的信息能被转换为具有移动标识号的步骤序列。一旦用户已经输入用于配置和所有移动轮廓的信息,那么用于每一移动的步骤序列可以被组合在本文中说明的单个表中。指向V存储器表的指针可以被存储在提供给所述模块的SDB的一段中。接着用于V存储器和SDB的数据块两者都可以被下载到PLC中。
使用PCALL指令及其相应的子程序的库指令可以被作为标准函数而提供以用于控制所述模块的操作。用户能够通过启用所述库指令的执行状态来监控所述模块的操作。
扩展I/O总线接口
所述模块可以提供十针的带状电缆用于连接到在所述PLC上的所述扩展I/O总线接口或前述的I/O扩展模块。还可以提供十针带状电缆连接器(公型),另一个I/O扩展模块可以连接到所述连接器里。所述模块可以返回ID码0x21,其将所述模块标识为:
(a)一智能模块
(b)离散I/O
(c)没有输入
(d)具有8个离散输出
所述模块可以提供一双端口RAM,通过所述双端口RAM可以实现与PLC的通讯。可以使用MPI或者更有效的块数据传输来访问用于所述模块的配置信息。使用S7-200CPU,所述模块的每一事务可以利用最多一个MPI请求和/或多个块数据传输(BDT)请求。
作为加电初始化的一部分,所述模块可以全部清除所述双端口RAM存储体0到7中的数据。分配给所述智能模块的SM数据区的50字节被定义在表1(所述定义是将此模块作为I/O系统中的第一智能模块而给出)。为了CUR_POS和CUR_SPEED的值相互一致,模块H/W设计可以提供各种设施来作为一个原子操作捕获这两个值。
表1
双端口RAM存储体定义(存储体8-15) |
SM地址 |
描述 |
SMB200-MB215 |
模块名(16ASCII字符)SMB200是第一字符“EM253位置” |
SMB216-MB219 |
S/W修订数(4ASCII字符)SMB216是第一字符 |
SMB220-MB221 |
错误码(SMB220是错误码的MSB)0000-无错误0001-无用户能源0002-不存在配置块0003-配置块指针错误0004-配置块的尺寸超过可用的V存储器0005-非法的配置块格式0006-规定过多的轮廓0007-非法的STP_RSP规范0008-非法的LIM-规范 |
当检测到数据状态的错误状态或变化时,所述模块可以通过更新与所述模块的位置相对应的SM地址而表明此情况。如果是第一模块,按要求它便会更新SMB200到SMB249以报告所述错误状态。如果是第二模块,它便会更新SMB250到SMB299;等等。
所述模块可以为由模块启动的与PLC的通讯使用存储体15到127。并不要求所述模块使用存储体128到255。
模块配置和轮廓
所述配置和轮廓信息两者都可以被保存在PLC的V存储器中的一个表内。使用在PLC中SM地址内所提供指针值,EM 253运动模块可以访问它的配置和轮廓信息。
所述配置/轮廓表可以被分成三段。第一段是配置块,其可以包含用于设置准备执行运动命令的模块的信息。第二段是交互块,其可以支持用户程序对运动参数的直接设置。第三段可以包含从0到64的轮廓块,其中的每一个都可以描述一个可由所述模块执行的预定的移动操作。
在所述模块执行一个定轮廓的运动之前,它可以执行所述计算以将提供在轮廓块中的一般速度和位置数据转换为实际执行所述移动所需的特定数据和动作。每当所述模块首次看到所述轮廓时,就可以执行这些计算,但是为了提高随后的轮廓执行的响应度,所述模块可以提供一个超高速缓冲存储器以为多达四个轮廓存储完整的执行数据。当用户命令执行一个给定的轮廓时,所述模块可以核对所述高速缓冲存储器以判断所述轮廓是否常驻。如果所述轮廓常驻在所述高速缓冲存储器中,则可以立即执行所述轮廓。如果所述轮廓不是常驻在所述高速缓冲存储器,则在执行所述轮廓前,所述模块可以将它从PLC的V存储器传输到高速缓冲存储器。
可以将所述轮廓高速缓冲存储器实现为一个先进先出队列,并根据最后执行轮廓的时间排序。当用户命令执行一个轮廓时,不管它以前是否存在于所述高速缓冲存储器中,所述轮廓可以成为最新项。如果即将要执行的轮廓当前没有常驻在所述高速缓冲存储器中,那么在最后一次执行后具有最长时间的常驻轮廓被从所述高速缓冲存储器处移走以为最新的轮廓腾出空间。图4示出了高速缓冲存储器工作情况的例子。
所述模块可以自动地管理所述超高速缓冲存储器而无需由用户所要求的任何干预。如果用户改变已经被执行的轮廓的轮廓信息,那么所述用户可以负责命令对模块的重新配置。一个模块配置命令可以导致所述模块读取配置信息并且清空所述高速缓冲存储器。如果用户未改变任何配置信息(仅仅改变轮廓信息),那么所述模块可以清空所述高速缓冲存储器。
所述高速缓冲存储器不必用于由交互块控制的运动。当发出执行一个运动的命令时,所述模块可以读取包含在所述交互块之内的所述数据以获取所述移动的规范。
下面的表定义了可位于S7-200 PLC的V存储器内的配置/轮廓表。所述模块可以访问该信息,但是所述模块一般不能改变它。所述表的字节偏移量的列可以是从配置/轮廓区的指针所指向的地址的字节偏移量。
每一项的类型字段可以规定所有双字值的数字格式。如果MEAS_SYS配置值设置为脉冲,可以使用一个双精度整数值(int)。如果MEAS_SYS配置值设置为工程单位,可以使用一个浮点值(fp)。
表2给出的用于速度和位置值的范围分别用每秒脉冲和脉冲单位表示。当使用工程单位时,可以要求换算为每秒脉冲数或脉冲以确定所述值在允许的范围之内。在绝对模式中,所述位置范围是-231到231-1。然而,交互移动的每一位置变化或轮廓移动的每一步可以有1到230-1脉冲的范围,除了在起始步允许0的位置变化。就相对模式而言,交互移动的每一位置变化或轮廓移动的每一步可以有1到230-1脉冲的范围。
|
|
(0-正极,1-负极)STP-控制用于输入的激活电平RPS-控制用于RPS输入的激活电平LMT--控制用于负行进限制输入的激活电平LMT+-控制用于正行进限制输入的激活电平0-激活高1-激活低 |
|
14 |
STP_RSP |
规定驱动器对于STP输入的响应(1字节)选择 描述0 无动作,忽略输入状态1 减速到停止并表明STP输入激活2 终止脉冲并表明STP输入3-255 保留(如果规定,表示有错误) |
|
15 |
LMT-RSP |
规定驱动器对于负限制输入的响应(1字节)选择 描述0 无动作,忽略输入状态1 减速到停止并表明达到极限2 终止脉冲并表明达到极限3-255 保留(如果规定,表示有错误) |
|
16 |
LMT+_RSP |
规定驱动器对于正限制输入的响应(1字节)选择 描述0 无动作,忽略输入状态1 减速到停止并表明达到极限2 终止脉冲并表明达到极限3-255 保留(如果规定,表示有错误) |
|
34 |
RP_ZP_CNT |
用于定义参考点的ZP输入的脉冲数(4字节)范围:1-231-1 |
Int |
38 |
RP_FAST |
参考点查找速度-快速;(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
42 |
RP_SLOW |
参考点查找速度-慢速;马达可以立刻停止的最大速度或低一些的速度(4字节)范围:MIN_SPEED到RP_FAST |
Int/fp |
字节偏移 |
名称 |
功能描述 |
类型 |
46 |
SS_SPEED |
起始速度是马达可以立刻从停止起动的最大速度并且最大速度是马达可以立刻停止的最大速度。允许在该速度以下操作,但是不适用于加速/减速时间。(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
50 |
MAX_SPEED |
马达的最大运转速度(4字节)范围:0-200Kpps |
Int/fp |
54 |
JOG_SPEED |
慢进速度;(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
58 |
JOG_INCREMENT |
所述慢进增量值是响应于单个慢进脉冲所移动的距离(或脉冲数)。(4字节)范围:1-230-1 |
Int/fp |
62 |
ACCEL_TIME |
以msec测量的从最小到最大速度所要求的加速时间(4字节)范围:20ms-32000ms |
Int |
66 |
DECEL_TIME |
以msec测量的从最大到最小速度所要求的减速时间(4字节)范围:20ms-32000ms |
Int |
70 |
BKLSH_COMP |
所述后冲补偿值是用于补偿在方向变化时的系统后冲(4字节)范围:0-230-1 |
Int/fp |
74 |
JERK_TIME |
用于JERK补偿加速/减速曲线(S-曲线)的起始和结束部分的时间。规定值0禁止 |
Int |
|
|
最大加速度率补偿。所述最大加速度率时间以msec给出。(4字节)范围:0ms-32000ms |
|
字节偏移 |
名称 |
功能描述 |
类型 |
交互块 |
78 |
MOVE_CMD |
选择操作模式(1字节)0-绝对位置1-相对位置2-单速、连续正旋转3-单速、连续负旋转4-手动速度控制,正旋转5-手动速度控制,负旋转6-单速、连续正旋转7-单速、连续负旋转8-255-保留(如果确定,表示有错误) |
|
79 |
|
保留-置为0(1字节) |
|
80 |
TARGET_POS |
在此移动中要到达的目标位置(4字节)范围:见注释1 |
Int/fp |
84 |
TARGET_SPEED |
本次移动的目标速度(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
88 |
RP_OFFSET |
参考点的绝对位置(4字节)范围:-231-231-1 |
Int/fp |
如表3所示,所述配置/轮廓表的轮廓块段可以包含从0到64的移动轮廓。如果需要超过64个移动轮廓,用户可以通过改变保存在配置/轮廓表指针中的值而承担调换配置/轮廓表的任务。
表3
字节偏移量 |
PF# |
Step# |
名称 |
功能描述 |
类型 |
轮廓块 |
92(+0) |
0 |
|
STEPS |
在此移动顺序中的步数(1字节) |
|
93(+1) |
|
|
MODE |
选择用于此轮廓块的操作模式(1字节)0-绝对位置1-相对位置2-单速、连续正旋转3-单速、连续负旋转4-保留(如果确定,表示有错误)5-保留(如果确定,表示有错误)6-带有触发停止的单速、连续正旋转(RPS输入信号停止)7-带有触发停止的单速、连续负旋转(RPS输入信号停止)8-双速、连续正旋转(RPS选择速度)9-双速、连续负旋转(RPS选择速度)10-255-保留(如果规定,表示有错误) |
|
94(+2) |
|
0 |
POS |
在移动步0中所要到达的位置(4字节)范围:见前述注释1 |
Int/fp |
98(+6) |
|
|
SPEED |
用于移动步0的目标速度(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
102(+10) |
|
1 |
POS |
在移动步1中所要到达的位置(4字节)范围:见前述注释1 |
Int/fp |
106(+14) |
|
|
SPEED |
用于移动步1的目标速度(4字节)范围:MI N_SPEED到MAX_SPEED |
Int/fp |
110(+18) |
|
2 |
POS |
在移动步2中所要到达的位置(4字节)范围:见前述注释1 |
Int/fp |
114(+22) |
|
|
SPEED |
用于移动步2的目标速度(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
118(+26) |
|
3 |
POS |
在移动步3中所要到达的位置(4字节)范围:见前述注释1 |
Int/fp |
122(+30) |
|
|
SPEED |
用于移动步3的目标速度(4字节)范围:MIN_SPEED到MAX_SPEED |
Int/fp |
126(+34) |
1 |
|
STEPS |
|
|
127(+35) |
|
|
MODE |
|
|
128(+36) |
|
1 |
POS |
|
Int/fp |
132(+40) |
|
|
SPEED |
|
Int/fp |
|
命令字节
所述模块可以提供一个字节的离散输出,它可以被用作命令字节。所述命令字节可定义如下,其中R:0=闲置,1=执行规定在command_code中的命令,如下面表4所示。MSB LSB7 6 5 4 3 2 1 0QBx
表4
Command_code | |
000 0000-011 1111 |
命令0-63,执行规定在轮廓块0-63中的运动 |
100 0000-111 0101 |
命令64-117,保留(如果规定,表示有错误) |
111 0110 |
命令118,激活DIS输出 |
111 0111 |
命令119,使DIS输出无效 |
111 1000 |
命令120,产生CLR输出脉冲 |
111 1001 |
命令121,重载当前位置 |
111 1010 |
命令122,执行规定在交互块中的运动 |
111 1011 |
命令123,获取参考点偏移量 |
111 1100 |
命令124,慢进正旋转 |
111 1101 |
命令125,慢进负旋转 |
111 1110 |
命令126,查找到参考点位置 |
111 1111 |
命令127,重载配置 |
在每个R比特的上升沿可以生成一个中断,以表明已经接收到一个新的轮廓执行的命令。同样地,在每个R比特的下降沿可以生成一个中断,以表明转移到闲置状态。所述模块固件有能力禁止该中断。
如果当命令有效时所述模块检测出转移到闲置(R比特改变为0状态),那么可以放弃正在进行中的操作,如果在进行一个运动,那么可以执行一个减速停止。一旦完成操作,那么所述模块在接收一个新命令前可以要求转移到闲置。如果放弃操作,那么所述模块在接收一个新命令前可以完成任何减速。当命令有效时,可以忽略command_code值的任何变化。
所述运动模块对PLC模式变化或故障条件的响应可以由PLC所施加的影响来控制,这是借助根据现有PLC功能定义的离散输出。可能的模块反应描述如下:
(a)所述PLC从STOP变化为RUN:所述模块的操作由用户程序控制。
(b)所述PLC从RUN变化为STOP:在转移到STOP时所述用户可以选择所述离散输出将达到的状态,或是所述输出所保持的他们的最后状态。因此,存在下列可能性:
1.当进行到STOP时,所述R位变成OFF-进行中的任何运动可以被减速到停止。
2.当进行到STOP时,R位变成ON-如果正在进行一个运动,就完成它;如果没有进行运动,那么执行由ID位规定的所述轮廓。
3.所述R位处于它的最后状态-可以完成进行中的任何运动。
所述PLC检测到一个致命错误并且把所有的离散输出变成OFF-进行中的任何运动可以被减速到停止;只要所述XA_OD信号保持有效就可以防止进一步地移动。
(d)如果失去与所述PLC的通信,那么所述运动模块可以使用一个看门狗定时器,所述看门狗定时器将所述输出变成OFF。如果所述输出看门狗定时器到时,那么进程中的任何运动可以被减速到停止。
(e)如果所述运动模块在所述模块的H/W或固件中检测到一个致命错误,那么所述P0、P1、DIS和CLR输出可以设置为不活动(inactive)状态。
命令0-63,执行在轮廓块0-63中规定的运动
此命令的执行能导致所述模块执行所述运动操作,该操作规定在由命令的command_code部分表示的轮廓块的MODE字段中。用于交互块运动操作的规范一般不被高速缓冲存储,因此它们能在每次所述模块接收到此命令时被读取。
在模式0(绝对位置)中,所述运动轮廓块能定义一到四步,其中每一步都包含描述所述移动段(segment)的位置(POS)和速度(SPEED)。所述POS规范可以表示绝对位置,其是基于指定为参考点的位置。当前位置和所述轮廓的第一步的位置之间的关系可以决定移动方向。在一个多步移动中,可以禁止反向行进,该反向行进可以导致报告一错误状态。
在模式1(相对位置)中,所述运动轮廓块能定义一到四步,其中每一步都包含描述所述移动段的位置(POS)和速度(SPEED)。所述位置值(POS)的符号可以确定所述移动的方向。在一个多步移动中,可以禁止反向行进,该反向行进可以导致报告一错误状态。
在单速、持续(continuous)速度模式(2和3)中,可以忽视位置(POS)规范,所述模块可以加速至规定在第一步的SPEED字段中的所述速度。模式2能被用于正旋转而模式3能被用于负旋转。
在具有非活性的触发停止和RPS的单速、持续速度模式(6和7)中,所述模块可以加速至规定在第一步的SPEED字段中的所述速度。并且如果当所述RPS输入成为激活的时,在完成规定在第一步的POS字段中的距离后可以停止移动。如果所述POS=0,那么不考虑已行进的距离,所述移动就可以减速到停止。模式6能被用于正旋转而模式7能被用于负旋转。
在模式8和9中,所述RPS输入的二进制值可以从如在轮廓块的开头两步中所规定的两个连续的速度值中选择一个。模式8能被用于正旋转而模式9能被用于负旋转。所述SPEED可以控制移动的速度。在此模式中可以忽略POS值。下面的表定义了所述输入和轮廓块内步骤之间的关系。
RPS |
描述 |
没有电流 |
步0控制驱动的速度 |
电流 |
步1控制驱动的速度 |
命令118,激化DIS输出
执行此命令可以导致激活DIS输出。
命令119,使DIS输出无效。
执行此命令可以导致使DIS输出无效。
命令120、产生CLR输出脉冲
执行此命令可以导致在CLR输出上发出一个50毫秒的脉冲。
命令121,重新加载当前位置
执行此命令可以导致所述模块读取在所述交互块的TARGET_POS字段找到的值并且将当前位置设置为该值。
命令122,执行规定在所述交互块中的运动
此命令的执行能导致所述模块执行规定在交互块的MOVE_CMD字段中的所述运动操作。用于交互块运动操作的规范一般不被高速缓冲存储,因此它们能在每次所述模块接收到此命令时被读取。
在绝对和相对运动模式(0和1)中,基于提供于交互块的TARGET_SPEED和TARGET_POS字段中的目标速度和位置信息可以执行一个单步运动。
在单速、持续速度模式(2和3)中,可以忽略位置规范并且所述模块可以加速至规定在交互块的TARGET_SPEED字段中的速度。
在手动速度控制模式(4和5)中,可以忽略位置规范并且用户程序可以将速度变化值加载到交互块的TARGET_SPEED字段里。当速度值改变时,所述运动模块可以持续地监控此地址并恰当地响应。
在具有非活性的触发停止和RPS的单速、持续速度模式(6和7)中,所述模块可以加速至规定在第一步的SPEED字段中的所述速度。并且如果当所述RPS输入成为激活的时,在完成规定在第一步的所述POS字段中的距离后可以停止移动。如果所述POS=0,那么不考虑已行进的距离,所述移动就可以减速到停止。模式6能被用于正旋转而模式7能被用于负旋转。
命令123、俘获参考点偏移量
执行此命令可以允许在与参考点位置不同的地址建立零位置。
在发出此命令以前,可以确定所述参考点位置并且用户可以将机器缓慢移动到工作起始位置。在接收到此命令时,所述模块可以计算在工作起始位置(当前位置)和参考点位置之间的所述偏移量并且将计算出的偏移量写入到交互块的RP_OFFSET字段。接着,可以设置当前位置为0。这样就可以将所述工作起始位置作为零位置。
如果所述步进马达迷失了它的位置(丧失动力,人工地复位所述步进马达,等等)可以发出所述寻找参考点位置(Seek to ReferencePoint Position)命令以自动地重建零位置。
命令124、慢进(jog)正旋转
此命令可以允许用户人工地发出用于在正方向移动所述步进马达的脉冲。
如果所述命令只保持激活状态不到0.5秒,那么在加速到JOG_SPEED的同时所述运动模块可以发出规定在JOG_INCREMENT中的脉冲数。如果所述命令保持激活的状态达0.5秒或更长时间,那么所述运动模块可以开始加速到规定的JOG_SPEED。一旦检测出转移到闲置时,所述模块可以减速到停止。
命令125、慢进负旋转
此命令可以允许用户人工地发出用于在负方向移动所述步进马达的脉冲。
如果所述命令只保持激活状态不到0.5秒,那么在加速到JOG_SPEED的同时所述运动模块可以发出规定在JOG_INCREMENT中的脉冲数。如果所述命令保持激活的状态达0.5秒或更长时间,那么所述运动模块可以开始加速到规定的JOG_SPEED。一旦检测出转移到闲置时,所述模块可以减速到停止。
命令126、寻找参考点位置
通过使用规定的寻找方法,执行此命令可以启动一个参考点寻找操作。当已经定位所述参考点并且运动已经停止时,接着所述模块可以将从交互块的RP_OFFSET字段中读取的值加载到当前位置。
命令127,重新加载配置
执行此命令可以导致所述模块读取来自SM存储器中适当的地址的配置/轮廓表指针。接着所述模块可以读取由该配置/轮廓表的指针所规定的地址中的配置块。所述模块可以将刚刚获取的配置数据与现有的模块配置进行比较,并执行任何所要求的设置改变或重算。可以丢弃任何高速缓冲存储的轮廓。
参考点的定义
通称为参考点的所述地址可以有几个模块输入状况的预定序列中的一个。所述用户可以选择最匹配所述应用需要的参考点定义。一旦用户已经选择一个参考点定义并且相应地配置了模块,那么所述用户可以发出寻找参考点命令。应此命令要求,所述模块可以自动地寻找所述参考点位置,在所述参考点处停止并且激活一个周期50毫秒的CLR输出。
用户可选择的可能的参考点定一列表如下(当包括所有的RP_SEEK_DIR和RP_APPR_DIR规范的组合时,选项的数目变为四倍):
a)模式1:所述参考点可以位于在来自工作区侧的路径上的RPS输入成为激活状态的位置处。
b)模式2:所述参考点可以在RPS输入的激活区域的中心。
模式3:所述参考点可以位于RPS输入的激活区外。RP_Z_CNT可以确定在RPS输入成为非活性状态之后在ZP输入处有多少零脉冲计数以用于移动。
模式4:所述参考点很可能位于RPS输入的激活区内。RP_Z_CNT可以确定在RPS输入成为激活的状态之后在ZP输入处有多少零脉冲计数以用于移动。
图5-8分别是用于模式1-4的参考点查找图表。这些参考点查找图表举例说明参考点的定义和发现所述参考点的顺序。
对于图5-8,定位所述工作区域以便要求从参考点到所述工作区域的移动是和RP接近方向相同的方向。通过以这种方法选择工作区域的地址,在参考点查找之后,对于第一个到工作区域的移动可以去除所述机械啮合(gearing)系统的所有反冲。
图9包括两个参考点查找图表,上面一个表示对于可以消除反冲的接近方向的所述工作区域与RPS和LIM+开关的关系。下面的表配置工作区域以便不必要消除反冲。尽管不推荐,但是对于在模式1-4中间每一个可能的查找顺序,一个类似的工作区域配置是可能的。
用户接口
表5示出所述模块的输入、输出和灯的状态。
表5
本地I/O |
灯 |
颜色 |
功能描述 |
|
MF |
红 |
当所述模块检测到致命错误时,点亮所述模块错误灯。 |
|
MG |
绿 |
当没有模块错误时,点亮所述模块正常灯;而当检测到配置错误时所述模块正常灯以1Hz的速率闪烁。 |
|
PWR |
绿 |
当在所述模块的L+和M终端提供了24VDC时,点亮用户电源灯。 |
输入 |
STP |
绿 |
当在终止输入电路有电流时点亮 |
输入 |
RPS |
绿 |
当在参考点转换输入电路有电流时点亮 |
输入 |
ZP |
绿 |
当在0脉冲输入电路有电流时点亮 |
输入 |
LMT- |
绿 |
当在负限制输入电路有电流时点亮 |
输入 |
LMT+ |
绿 |
当在正限制输入电路有电流时点亮 |
输出 |
P0 |
绿 |
当P0输出有脉冲时点亮 |
输出 |
P1 |
绿 |
当P1输出有脉冲或表示方向时点亮(参见在配置/轮廓表中的IN_OUT_CFG字段的描述) |
输出 |
DIS |
绿 |
当DIS输出是激活的时点亮 |
输出 |
CLR |
绿 |
当清除偏移计数器输出是激活的时点亮 |
图10是示出了本发明典型运动模块的灯的典型布局和标记的方框图。图11是示出用于本发明典型运动模块的各输入输出以及相关用户电源终端的典型电路。此图是一个略图并不表示所述接线板螺旋座的顺序。
表6示出了用于输入输出的所述模块的的规范。所述开路漏极操作的输出高于5VDC可能增加射频辐射以至超过容许限度。对于某些系统或线路可能需要射频密封措施。依靠脉冲接收机和电缆,一个附加的外部上拉电阻可以提高脉冲信号品质及噪声抗干扰度。
表6
描述 |
规范 |
供电输入供电电压 | 11-30VDC |
输入供电电流(5VDC±10%)负载电流0mA(无负载)20mA(额定负载)电流限制(0.5-1.5A) |
12VDC输入120mA,max300mA,max700mA,max |
24VDC输入70mA,max130mA,max350mA,max |
绝缘测试值 (到逻辑的输入功率)(到输入端的输入功率) |
每分钟500VAC |
反极性: |
在L+输入功率和+5VDC输出功率 |
输入电压允许的最大连续值STP,RPS,LMT+,LMT-ZP电涌额定值STP,RPS,LMT+,LMT-ZP逻辑“1”信号(最小)STP,RPS,LMT+,LMT-ZP逻辑“0”信号(最大)STP,RPS,LMT+,LMT-ZP |
30VDC在20mA时是30VDC,最大05.秒35VDC在4mA时是24VDC,额定的在15mA时是24VDC,额定的在2.5mA时是15VDC,最小在8.0mA时是3VDC,最小在1mA时是5VDC,最大在1mA时是1VDC,最大 |
输入延迟时间STP,RPS,LMT+,LMT-ZP |
0.2-12.8msec,用户可选的最小2μsec |
图12是用于所述运动模块的典型实施例的脉冲输出产生方框图。表7提供图12的运动模块方框图的各部分的功能描述。
表7
CPU访问记忆存储器 |
说明 |
经由管道写入mspec提供读回 |
脉冲宽度规范,每脉冲的时钟数15位+符号,符号位设置错误。 |
m spec lsb不可访问 |
脉冲宽度规范的16位低有效位扩展,累积分数的差分(delta)脉冲变化 |
经由管道写入dmspec |
带符号的32位,固定点delta m(delta脉冲宽度)规范 |
m cntr |
加载了m spec的脉冲宽度计数器,倒数过0{每脉冲 |
不可访问 |
(m+1)时钟} |
m hi cntr不可访问 |
加载了m spec的右移位值,倒数过0,当任何位是1时脉冲输出为高电平(可忽略的不对称) |
脉冲计数器(pc)不可访问 |
在每一脉冲的前缘计数,从载入值倒数到0。(载入pc的n导致执行n脉冲) |
经由管道写入脉冲计数spec(pcspec) |
从脉冲计数spec的管道位31:30载入脉冲倒数计数器的值,结合RUN命令,选择最后步和连续运行模式 |
pc[31:30]经由管道写run_mode |
Spec和管道拷贝Spec拷贝规定当前操作如下:00--什么都不做/Stop01--逐步运行,pc倒数到0,接着从管道载入新的dm和pc10--运行持续,pc倒计数...可能溢出11-最后一步,pc倒计数,接着停止在任何停止之后,要再启动要求状态机必须由Stop命令带到闲置状态,接着为设置下一个移动载入pc和xfr_pipeline |
pc管道只写 |
当脉冲计数=0或基于xfr_pipeline时,将值载入pcspec。启动带有0脉冲计数规范的运行步操作是错误的。 |
dm管道只写 |
当脉冲计数比较spec或基于xfr_pipeline时,将值载入dm spec。 |
m spec管道只写 |
当脉冲计数=0或基于xfr_pipeline时,将值载入mspec。通常使用delta脉冲宽度机制而不是直接载入m管道来完成运行时间在脉冲宽度方面的变化。 |
管道更新不可访问 |
如果存在用于载入的新值,用于m,、dm、pc管道道的记录。在写入到lsb时为每一寄存器置位。除非已经写入pc lsb,否则就不传输值。 |
Xfr管道<无数据> |
仅在写入时解码地址-如果已经更新管道,就强制将dm、pc和m管道载入到工作寄存器。用于建立用于启动的工作寄存器+管道寄存器,或者用于脱离运行持续模式。同样,通过强制管道按要求载入m、dm和pc,用于避免m溢出情况。在电流脉冲完成后,内部同步以便有效。 |
|
|
Pc读取缓存器只读 |
脉冲计数读取缓存器。 |
m读取缓存器只读 |
在每次更新后从m_spec拷贝。由msb读取锁定,由lsd读取释放。 |
行程计数lsb只读 |
可能不需要....如果不是200KHz(需要调查)将脉冲计数分解为CPU ASIC可以计数的速率。 |
所有寄存器的复位状态是0 |
地址分配●0:3命令/状态寄存器●4:7 dm_pipe●8:B pc_pipeline●C:D m_pipe●E:F未使用●10 xfr_pipeline●11中断ack地址●12 rps属性●13:1B保留●1C:1D m_spec读取缓存器●1E:1F m_spec读取缓存器越图(overmap)●--28:2B pc_actual读取缓存器(删除) |
命令寄存器读/写,由CPU和FPGA改变地址C00 |
位 |
位0,1是写自uP的命令,如同写入一样地读回,而不是由机器改变位2...5反映机器响应见如下顺序说明 |
7 |
未使用 |
6 |
RPS,在过滤器之后,1=在输入点的电流 |
5 |
1=accel_bar,动作冻结脉冲宽度,组织加速和减速 |
4 |
1=active_pulse,表示脉冲在进程中以第一脉冲实际前缘启动持续到最后一个脉冲的下降时间(lowtime)完成为止 |
3 |
1=abort_ack处理的放弃命令,管道rupt和accel_bar有效。已经完成从run_steps的退出,封锁从run_continuous的出口 |
2 |
1=run_ack,机器确认转移到运行状态。提交当前顺序中的第一脉冲在finish或estop状态的最后一个脉冲被清除 |
1 |
1=abort_cmd,来自uP的放弃命令。退出到abort状态,由此如果在run_steps就到达run_continuous。封锁从run_continuous的退出。 |
0 |
1=run_cmd,来自uP的运行命令0=来自uP的停止命令 |
Rps属性寄存器读/写地址C12 |
位 |
|
|
|
|
7:5 |
RPS过滤器:0=2us,1=200us,2=400us,3=800us,4=1.6ms,5=3.2ms,6=6.4ms,7=12.8ms(输入点的物理延迟将会增加几微秒) |
4 |
RPS_falling_edge:1=rps下降沿的xfr_pipeline |
3 |
RPS_rising_edge:1=rps上升沿的xfr_pipeline |
2 |
RPS脉冲捕获:1=捕获在RPS中的下一个变化。不允许RPS_filt到uP的进一步变化除非清除该位。 |
1 |
空 |
0 |
空 |
方向属性寄存器读/写地址C01 |
位 |
|
7:3 |
空 |
2 |
时钟源:0=sys clk1=外部时钟(CPU PCLK) |
1 |
Dir模式:0=为上升而输出0脉冲,为下降而输出11=输出0脉冲,为上升而输出1=1 |
在操作期间不应该改变位[2:0] |
0 |
Dir:0=向上计数1=向下计数 |
中断/状态寄存器只读地址C02 |
位 |
FPGA svc_rqst=在此寄存器中由中断屏蔽寄存器选择(=1)的所有位的或。通过将1写入到中断Ack寄存器的相应位而清除锁存沿位。必须由恰当的准确动作清除状态电平位。屏蔽的变化不会改变锁存沿位的先前状态,但是会屏蔽/中断屏蔽所述电平。 |
中断屏蔽寄存器读/写地址C03中断Ack只写地址C11 |
7 |
Pc underflow(下溢):在零值时脉冲倒数计数器接收到一个脉冲。如果感兴趣,CPU可以注释pc下溢并记录。锁存沿。这样可以定期发生,例如,运行步进过渡到运行持续。 |
6 |
M overflow(上溢)/underflow(下溢):1=在企图将dm应用到m时发生的非法结果(负数)。拒绝将非法值加载到m_spec,继续运行最后的合法值-常数m。状态电平。要求m或dm管值道的变化,并且要求xfr_pipeline加载来自管道的正确的m和dm。 |
5 |
Pipeline starved(管道不足):没有用于表示一完成的管道加载的更新的pc就请求传送管道(由计数脉冲运行步骤完成、rps沿或是命令的xfr请求)。封锁管道加载,以最后的值继续运行。锁存沿。注意到消除这一位消除了中断但没有改变基本的运行时间状态机,该状态机卡在决不会完成的run_stcp。恢复就需要一个放弃命令以脱离run_steps模式,并且需要xfr_pipeline载入m、dm和pc值来启动恢复步骤。 |
4 |
RPS falling edgc(下降沿):1=发生了RPS下降沿,并且没有通过写入到中断清除寄存器而被清除。锁存沿。 |
3 |
RPS rising edge(上升沿):1=发生了RPS上升沿,并且没有通过写入到中断清除寄存器而被清除。锁存沿。 |
|
2 |
Qx.7 falling edge:1=自通过写入到中断清除寄存器而最后一次清除该位后,在双端口RAM的Qx.7上的下降沿。锁存沿。(QBx=0页,来自从属空间的DP-RAM地址4或总线的R12) |
1 |
Qx.7 rising edge:1=自通过写入到中断清除寄存器而最后一次清除该位后,在双端口RAM的Qx.7上的上升沿。锁存沿。(QBx=0页,来自从属空间的DP-RAM地址4或总线的R12) |
0 |
Pipeline empty:1=没有用于管道传送的当前更新过的及可用的寄存器。注意:如果更新任何管道寄存器,那么该位=0。更新发生(post)在lsb写入。状态电平。 |
Q更新检测C13 |
7 |
位7设置在从从属接口到Q的任何写入上。来自本地处理器的任何写入可以清除位7。注意:Qx.7上升沿/下降沿中断动作可以由em总线从属硬件中的Qx.7触发器的状态决定,而不是由双端口RAM中的所述位的值决定。从uP总线到Qx的写入可能导致明显不一致的操作。 |
|
|
状态图
用于所述运动模块的状态图可以包括下面的变量:
run_q:合格的运行命令,命令寄存器内容的变化是在选择的安全时间识别的-通常在低于最高级图表的子状态中。
XO=stop
01=run
11=abort
modes:来自pc(31:30)
run_steps,last_step,run_cont(连续的),mode_stop
xfr_pipeline:用于将刷新的管道值加载到工作寄存器的命令,由CPU或RPS边沿控制。
run_cld:对脉冲发生器状态机的运行指令。
XO=stop
01=run
11=abort
pc_capture_time:一个计时选通(timing strobe),其名字来自于其最初用于确定脉冲计数器内容何时稳定以用于读取/捕获。现在仅用于状态转移计时。
状态:
idle:无所作为,在xfr_pipeline命令退出到ini_tload。
init_load:将初始的管道值移动到工作寄存器,等待运行命令以便转移。
如果是停止命令或mode_stop就回到空闲
去到run_a_step以启动步进的轮廓
去到run_continuous用于稳定的速度操作
run_a_step:起动脉冲机器,设置run_ack,周期性地检验脉冲计数和运行命令,出口在:
如果运行命令=stop、退出到estop
如果运行命令=abort,退出到abort
当脉冲计数=0时,根据run_steps或last_step所选退出到pipe_load或finish。
pipe_load:将更新的管道值加载到工作寄存器,检验新的pc[31:30]以确定下一个状态:
回到run_a_step以继续一个步进的轮廓
去到用于稳定的速度操作的run_continuous
直接去到finish
如果没有刷新pc,清除所有管道刷新标志并返回源状态
run_continuous:起动脉冲机器,确认运行或放弃命令,周期性地检验运行命令和xfr_pipeline。
在pipe_line去到pipe_load以用于新信息
如果运行命令=stop,就退出到estop
abort:指示脉冲机器固定脉冲宽度,去到run_continuous
estop:使脉冲机器不能启动新脉冲,清除run_ack,在脉冲完成时退出到idle
finish:使脉冲机器不能启动新脉冲,清除run_ack,在脉冲完成时退出到idle并且运行命令=stop。
如下,表8示出用于脉冲发生器模块的某些可能的操作顺序。
表8
处理器 |
FPGA |
正常的步进运行序列pc spec[31:30]=逐步运行 | |
|
从复位开始---清除所有命令寄存器。管道和spec数据寄存器未知。(有些可能是RAM,不易初始化) |
将方向选择写入属性寄存器 |
在pulse_out[1:0]上设置脉冲上/下和方向 |
写入m,dm,pc_pipelines |
在每一个值的lsb标记管道更新 |
将xx写入xfr_pipeline地址 |
将用于写入寄存器的管道值传送到spec寄存器。清除pc。 |
写入dm,pc_pipeline |
在每一值的lsb写入上标记管道更新 |
写入run_cmd<=1 |
●将m_spec载入到脉冲宽度计数器●启动脉冲输出,置位run_ack位●在每一脉冲期间,m_spec<=m+dm●在每一脉冲的最后 |
|
●pc=1●m_cntr<=m_spec● 当pc=0时,●载入来自管道的新的值(直到在管中有新值时才载入)●清除管道刷新标志●设置管道空中断 |
写入dm,pc_pipelines |
在每一值的lsb写入上标记管道更新 |
写入到rupt_ack地址 |
清除中断 |
CPU可以检测状态,这是通过读取:●Run_ack=1表示已经开始●Active_pulse=1表示正在运行●错误寄存器(参见下面)●m_spec(脉冲宽度)●pc(脉冲计数)●msb读取锁存相容的字/长值 |
如上继续脉冲输出和管道载入,直到在spec寄存器的pc[31:30]表示最后步骤为止。●当最后步骤并且pc=pc_spec●run_ack<=0●停止脉冲输出●不清除pc●当最后脉冲完成时Active_pulse<=0 |
写入run_cmd<=0 |
返回闲置状态,准备启动新序列 |
|
|
步进运行放弃 |
|
写入abort_cmd<=1 |
在下一个脉冲上升沿识别ABORT禁止所有管道负载 |
|
禁止新的管道请求中断在接下来的下降沿,dm_bar<=1禁止脉冲宽度变化在第二脉冲上升沿,abort_ack<=1表示完成转移。(注意:这样将违反S曲线2nd导数限制,但不会严重到导数符号反转) |
读取m_spec,检测管道请求中断的状态,推断dm_spec载入矫正动作dm、pc等等 |
|
清除ABORT位以使得xfr_pipeline可再将xx写入xfr_pipeline地址 |
在下一个脉冲将新的管道数据传送到spec寄存器继续在正常RUN状态下运行 |
|
|
持续运行序列 |
|
Cpu在步进运行序列中的加速后已经将pc_spec[31:30]=run_continunous载入到管道 |
已经在RUN模式下,声明管道请求中断用于m、dm的每一管道的spec运行脉冲。Pc连续计数,而没有管道载入、pc溢出post错误位以及中断来允许CPU计数翻滚(roll over) |
写入m,dm等等的下一个值 |
标记更新的管道值 |
将xx写入rupt_ack地址 |
清除管道请求中断 |
|
继续每一m,dm spccs的运行pc继续计数 |
|
没有进一步的管道载入或中断 |
将xx写入xfr_pipeline地址 |
在下一个脉冲,xfr更新管道值m,dm,pc等等的每一个新值的运行 |
通过载入管道和xfr_pipeline命令在fly上监控状态、改变速度等等 |
响应xfr管道命令,否则运行时无变化 |
无论基于何种标准,决定开始减速。将用于即将到来的减速的第一步的值写入dm,pc管道。管道中的Pc[31:30]一般将=逐步运行 |
|
将xx写入xfr_pipeline地址 |
在下一个脉冲,xfr更新管道值运行m、dm、pc等等的每一个新值,包括通常将模式变回到逐步运行的新pc[31:30] |
|
|
E-Stop |
|
写入命令寄存器StopCPU可以检测上述每一个的状态 |
电流脉冲完成。接着脉冲停止。pc和m_spec没有改变 |
对于某些运动模块,表9提供了可能的CPU ASIC引脚分配和地址映射,如下:
表9
CPU管脚功能 |
运动模块用法 |
非易失性CS |
高达256KB闪存或OTP。要求42096字节的此类 |
|
存储以载入FPGA程序 |
RAM CS |
32KB RAM |
自由芯片选择 |
运动FPGA●0:3FF+800=800:BFF智能模块DP RAM●C00:C1D运动寄存器空间○0:3命令/状态寄存器●0:命令寄存器●1:方向属性寄存器●2:中断/状态寄存器●3:中断屏蔽寄存器○4:7 dm_pipe○8:B pc_pipe○C:D m_pipe○E:F m_pipe overmap○10 xfr_pipeline(关于写入的命令)○11中断ack(确认写入字节的每一位)○12 rps属性寄存器○13 q更新检测器○14:1B为附加的读回保留○1C:1D m_spec读取缓存器○1E:1F m_spec读取缓存器overmap○28:2B pc_actual读取缓存器(删除) |
I0.0 |
E-Stop(所有输入=1用于输入点的功率流动) |
I0.1 |
Limit+ |
I0.2 |
Limit- |
I0.3 |
脉冲起或脉冲,输入到脉冲事件的高速计数器(4) |
I0.4 |
脉冲降或方向,输入到脉冲事件的高速计数器(4)。1=在脉冲&方向模式中的计数 |
I0.5 |
用户功率OK |
I0.6 |
脉冲起或脉冲,输入到脉冲事件的高速计数器(1) |
I0.7 |
脉冲降或方向,输入到脉冲事件的高速计数器(1) |
I1.0 |
(无动作停止) |
I1.1 |
RPS:在RPS期间门控制高速计数器(1)以用于计数脉冲输出 |
I1.2 |
Z-脉冲/高速计数器(2)Z-脉冲计数器 |
I1.3 |
FPGA Init 1=在进程中的FPGA配置复位或配置错误。使用脉冲捕获或与Q1.1握手以确认响应于Q1.1触发器(toggle)发生配置复位。 |
I1.4 |
(无动作停止) |
I1.5 |
RPS:在RPS期间门控制高速计数器(2)以用于计数Z脉冲 |
Q0.0,Q0.1 |
空 |
Q0.2 |
停用用户驱动马达(1=下降输出(sinking output)中的电流) |
Q0.3 |
清除偏移计数器(1=下降输出的电流) |
Q0.4 |
模块正常灯,1=灯打开 |
Q0.5 |
空 |
Q0.6 |
从属使能(Slave Eable),1=总线响应使能 |
Q0.7 |
运动复位,0=复位运动寄存器、计数器等等 |
Q1.0 |
配置使能:1=>写入各周期到非易失性芯片,选择空间,将FPGA配置数据载入到FPGA。负载是顺序的,每字节1个写入,用于所有的42096个字节。(可以插入其它周期,但每写入到FPGA空间就增加内部地址指针)。运动模块CPU复位=从加电时起最多200ms。从“加电”到Slave就绪的Spec延迟:500ms主CPU复位=最少140ms |
|
可用于载入的时间=140+500-200=440ms估计需要86ms |
Q1.1 |
配置复位:0=>复位FPGA配置。清除所有FPGA配置RAM,初始化RAM地址指针。选择检测(sense)以便看门狗定时器到时时清除FPGA |
待处理的功率不足 |
禁止EM总线输出 |
看门狗定时器是: |
555定时器振荡器,时钟时间~994uS,范围600-1300us |
INT4 |
运动服务请求 |
RXD/TXD |
在跳线上用于闪存下载通讯的stake |
PCLK |
改变运动脉冲宽度计数器的时基以用于低速操作。不希望在脉冲期间将时基从33MHz转变到PCLK,或者PCLK在频率上发生变化。 |
脉冲计算
可以设想许多运动方案。当致动器行进距离很短并且不足以实现最高速度时,就出现了尤其困难的一个方案。对于此方案、至少可以识别三种情况。
通常可以由F_start、F_end(F0)和t_a(加速时间)确定一个线性斜率,如此
斜率a=(F_end-F_start)/t_a。
同样,n_end=从F_tart到F_end的脉冲数。
在S曲线的情况下:
t_j=最大加速度率时间(jerk time),a_max=(F_end-F_start)/t_a,
k=da/dt_max=a_max/t_j
所述用户可以确定相应于所期望的运动距离的n_target(nt)。
情况1:线性加速度,加速度=减速度
图13是用于本发明典型实施例的频率-时间图,示出了此情况。由n_target<2*n_end识别所述问题情况。
解决办法:
选择刚刚小于nt/2的路标点n1,以及相关的F1。
轮廓由从F_end到F1的加速度和从F1到F_end的减速度组成,并具有n_cs脉冲的中间恒定速度步,n_cs=nt-2*n1。
情况2:线性加速度,加速度a1不等于减速度a2。
图14是用于本发明典型实施例的频率-时间图,示出了此情况。对于减速度斜率:F_end仍是高频,n从低速数起,恰如它是加速度斜率一样。由n_target<n_end_1+n_end_2识别问题情况。
ni=1/2a1t1 2+F0t1;n2=1/2a2t2 2+F0t2;t2=(a1/a2)t1
nt=F0(t1+t2)+a1t1 2+a2t2 2,或
a1/2(1+a1/a2)t1 2+(1+a1/a2)F0t1-nt=0
a1/2t1 2+F0t1-nt/(1+a1/a2)=0
t1=-F0/a1+sqrt{F0 2/a1 2+2nt/(a1(1+a1/a2))}
对于很短距离移动,F0*t可能是总移动明显的一部分。
对于可实现的运动,在所述根之下总有一个正数并且通过将正平方根添加到所述初始项总是可以发现可实现的根。
使用上述表达式以计算t1。现在,发现n1=1/2a1t1 2+F0t1,选择在加速度斜率上刚刚小于n1的路标点,以及相关联的速度F1。按要求在所述减速度斜率上进行内插以在加速度和减速度斜率之间匹配速度,在所述减速斜率上发现n2。如前所述,得到连接两个斜率的恒定速度步的长度,n_cs=nt-n1-n2。总移动是n1步的加速,一个(短的)恒定速度步n_cs,n2步的减速。
情况3:短的S曲线-距离n不足以使得S曲线到最大速度
图15是用于本发明典型实施例的频率-时间图S曲线图,示出了此情况。
对于所述短S曲线的情况:tj=最大加速度率时间、amax=(F_end-F_start)/t_a、k=da/dt_max=amax/tj
在所述初始曲线区:
a=kt
F=F0+1/2kt2
F随最大加速率时间tj而变:Fj=1/2ktj 2
对于所述S形曲线,记住(recall)有与最大加速度率时间,tj有关的Fj,并且在曲线的提高和减少加速度部分期间,在曲线区F的变化是对称的。
如前所述,一个过程将解决该简单的梯形,识别在计数n1和时间t1达到的最高速度F1。接着,将最高频率减少到一个以相同的加速/减速时间t1可以实现的新Fmax。所述n_cs(恒速区)现在从所述简单的梯形情况下稍微扩展,因此:n_cs=nt-2*n(Fmax)。
如果t1>=2tj:存在一个线性区+2个完全的最大加速度率时间。获取Fmax=F0+2*Fj+(t1-2tj)*amax。把标准S曲线计算应用到Fmax以得到达到Fmax的n-v。接着所述恒速距离是n_cs=nt-2*n(fmax)
如果t1<2tj:将有一个在t1/2处带有拐点的纯S曲线。ΔF在所述拐点周围:Finflection=1/2k(t1/2)2,并且Fmax=F0+2*Finflection=F0+k(t1/2)2.把所述标准S曲线应用到Fmax并且如前所述的得到n_cs。
下述是一典型的伪码子程序列表,其用于为运动控制轮廓的一部分确定多个目标频率、脉冲宽度、差分脉冲宽度以及脉冲计数,如上所述,所述部分是根据一个确定的开始频率、结束频率、最大加速度和加速度的最大变化(也就是说,S形曲线情况)的单一的频率变化。所述目标频率是半对数分布的,其具有各种约束,以实现可实行的最少时间间隔和最大时间间隔,该最大时间间隔与表示S曲线的较高频率部分的所期望的精确度水平一致。移除所有的数据输入与输出以阐明所述算法。
Rem:S-curve version
Rem:Generate table of target pulse counts and pulse widths with
interpolation factor
Rem:divide up the ramp into steps(way points)of equal percentage changes
in F
Rem:for each step,find the target F,pulse width,pulse count,and change in
pulse width
Rem:per pulse needed to get there whie staying on the slope
Rem:
Rem:limit change in acceleration per Jerk Time spec--da_dt=a_max/
Jerk_time
Rem:keep a working buffer of steps,selectively plot points
Rem:so that a complete slope can be recorded
Rem:use f_end/f_start ratio to set target steps size
Rem:1.15^32~100;1.1^32~20;1.1^48~100
Rem:e.g.,for a 5%start speed(1/20),32 steps will give~10%dF/F
Rem:initial dF/F/step=exp(log(fmax/fmin)/max_steps)
Rem:if step<1 ms set step time to 1 ms
Rem:if step<1 pulse set step time to 1 pulse
Rem:when F appreciable,set dF/F to a moderate mid-range value
Rem:then go to tighter spacing of steps in upper jerk range
Rem:m=clocks/pulse,n=pulse count at each step,dn=delta n per step
Dim m(100)As Long
Dim n(100),dn As Long
Rem:a step is a pre-calculated way point,controlling multiple pulses
Dim step As Integer,pulse As Long
Rem:m_sum records actual elapsed time in clocks by adding m’s for each
pulse
Rem:m_fix:shifted fixed point that accumulates fractional changes in pulse
width
Dim m_sum(100),m_fix As Long
Rem:fixed point shift is decimal for ease of de-bug,will be binary factor
(e.g.,1024)in use
Dim fix_shift As Long
fix_shift=1000
Rem:elapsed time to beginning of step,time/step,jerk time
Dim t(100),dt,t_j As Double
Rem:dm is shifted fixed point fractional change in pulse width/pulse
Dim dm(100)As Long
Rem:frequency at step,jerk frequency associated with jerk time,derivative of
a
Dim f(100),f_j,da_dt As Double
<dp n="d46"/>
Dim i,j,k,clear_row As IntegerRem:misc indices
Dim m_dt,m_bar As Double
Rem:input parameters:acceleration time,frequencies
Dim t_a,F_start,F_end,F_clock As Double
Rem:dF/F factor to compute equal percentage steps
Dim dF_factor As Double
Dim max_steps As Integer
Dim plot_row,plot_time,plot_f,plot_m,plot_n As Integer
Rem:starting values for stepping
Rem:time is at the beginning of a pulse & step
t(0)=0
Rem:m is the count for the pulse that is executing
Rem:dm is applied at the end of a pulse...that is
Rem:the way point pulse is executed in full
m(0)=Int(F_clock/F_start)
f(0)=F_start
Rem:n is the count of pulses completed,starts at 0
n(0)=0
Rem:a_max is mid-point slope,da_dt is limit set by jerk time
a_max=(F_end-F_start)/t_a
da_dt=a_max/t_j
Rem;f_j is frequency change associated with jerk time
f_j=0.5*a_max*t_j
Rem:a_f is acceleration,function of frequency
a_f=0
Rem:accumulator for all clocks in all pulses
m_sum(0)=0
Rem:set expectation for early dF steps along ramp
f_ratio=F_end/F_start
dF_factor=Exp(Log(f_ratio)/max_steps)
f_ddF=F_end*0.5
Rem:ask about--can profile(speed,position settings)be changed
permanentlv from TD200?
Rem:Round Off Error Control
Rem:on each step,seek to re-establish correct SLOPE from current position
Rem:rather than close adherence to steps vs.time
Rem:choose next F for each step as dF/F*F(last step)
Rem:choose a(=dF/dt)for step as value for chosen F as ideal result
Rem:from applying da_dt
Rem:delta t forthis step chosen as dF/a
Rem:dm(fixed point integer)determined to reach from actual m
Rem:of last step to new ideal m in ideal time dt
Rem:new m actual figured as n*dm added on to previous actual
Rem:new t actual figured from accumulated m
Rem:new f actual figured from m actual
<dp n="d47"/>
slope complete=False
step=0
Rem:main stepping loop-1 loop per way point
Do Until slope complete
step=step+1
Rem:find the target frequency,time,counts,for end of step
Rem:clamp dF_factor for mid-range,then reduce for upper jerk region
f(step)=f(step-1)*dF_factor
If f(step)>=0.99*F_end Then
f(step)=F_end
slope_complete=True
End If
Rem:current value of a(f),sub for a(t),determined separately for
Rem:lower jerk range
Rem:mid range
Rem:upper jerk range
Rem:first if covers F_end<2*f_j,hands control early to last else if
If f(step)<(f(0)+f_j)And f(step)<(F_end/2)Then
a_f=Sqr(2*(f(step)-f(0))*da_dt)
ElseIf f(step)<(F_end-f_j)Then a_f=a_max
ElseIf Not slope_complete Then
a_f=Sqr(2*(F_end-f(step-1))*da_dt)
dF_factor=1.01+a_f/a_max*0.05
End If
Rem:find provisional time dt for next step to this target F
Rem:if needed,adjust step time>1 ms and>1 pulse time
Rem:if step time is increased to meet mins,adjust target F and dF_factor
dt=(f(step)-f(step-1))/a_f
If dt<0.001 Or(dt<(1/f(step-1)))Then
dt=max(0.001,1/f(step-1))
t(step)=t(step-1)+dt
Rem:since t changed,choose next f for ideal adherence to t
f(step)=a_f*(t(step)-t(0))+f(0)
Rem adjust step ratio to reach final F from current step
f_ratio=F_end/f(step)
If step<>max_steps Then dF_factor=Exp(Log(f_ratio)/(max_steps-step))
Else
t(step)=t(step-1)+dt
End If
Rem:find next m for chosen f
m_ideal=F_clock/f(step)
<dp n="d48"/>
Rem:find total clocks to next step
m_dt=dt*F_clock
Rem:average m/pulse to next step
m_bar=(m_ideal+m(step-1))/2
Rem:pulses to next step(dn)is total clocks divided by average m
dn=Int(0.5+m_dt/m_bar)
n(step)=n(step-1)+dn
Rem:with new m and dn,find dm/pulse
Rem:change radix of dm fixed point to maintain precision
Do
dm(step-1)=Int(fix_shift*(m_ideal-m(step-1))/dn)
If(Abs(dm(step-1))<100)Then fix_shift=fix_shift*10
Loop Until Abs(dm(step-1))>=100
Cells(plot_row,plot_dm).Value=dm(step-1)
Rem:compute true m(step)and t(step)by adding up dm’s as hardware will
m_fix=CLng(m(step-1))*fix_shift
m_sum(step)=m_sum(step-1)
plot_ref=m_fix
Rem:for each pulse,add dm to m,accumulate total clocks
Forpulse=n(step-1)+1 Ton(step)
m_sum(step)=m_sum(step)+Int(m_fix/fix_shift)
m_fix=m_fix+dm(step-1)
Next pulse
Rem:end for/next loop of pulses between steps(way_points)
Rem:replace ideal m and t for this step with actuals
m(step)=m_fix/fix_shift
f(step)=F_clock/m(step)
t(step)=m_sum(step)/F_clock
Loop
Rem:end looping on steps(way_points)until slope_complete
End Sub
尽管已经参考本发明的具体的实施例描述了发明,但是应该明白,许多的变化、修改和附加的实施例还是可能的,并且相应地,所有这类的变化、修改以及实施例将被认为是在本发明的精神和范围之内。例如:运动模块的编程可以发生在因特网上。同样地:脉冲列的传输可以发生因特网上。如在本文中完全阐明的那样,引用在本文中具体确定和论述的参考部分以作参考。相应地,所述附图和说明书将被认为在本质上是说明性的,而不是限制的。