在SIMOTION系统中,运动控制、逻辑控制和工艺控制都需要通过编程实现。因此,工艺对象TO的功能也需要使用相应的程序命令进行激活或禁止,下面对与TO编程相关的几个概念进行详细的解释。
1.命令的同步/异步执行
同步执行是指当一定条件满足之后才开始执行相应的指令,反之则为异步执行。例如,运动控制指令在同步执行时,可以等待某一特定运动状态到达或者定位结束后再执行下一条指令。这种执行方式非常适合于顺序运动控制,也即在Motion Task中编写程序。
在运动控制命令中一般会有一个NextCommand的输入参数,来规定本命令的执行方式,如果设置NextCommand=When_Motion_Done,那么在程序执行过程中,执行了这条运动控制命令后会处于等待状态,在该运动完成以后,程序才会继续往下执行,这种执行方式就是同步执行,程序的执行状态与运动的完成状态是同步的。如果设置NextCommand=Immedi-ately,那么在程序执行过程中,执行了这条命令后,会立即继续往下执行其他命令,这种执行方式就是异步执行,程序的执行状态与运动的完成状态是异步的。当然NextCommand参数也可能有其他的取值,以满足不同场合的要求。比如位置轴的定位命令“_pos”的Next-Command参数是一个枚举性变量EnumNextCommand,在系统中的定义如下:
IMMEDIATELY(60) 命令立即传输
WHEN_BUFFER_READY(159) 命令缓存区就绪后
AT_MOTION_START(13) 插补开始
WHEN_ACCELERATION_DONE(156) 加速段结束
AT_DECELERATION_START(12) 减速开始
WHEN_INTERPOLATION_DONE(162) 设定点插补结束
WHEN_MOTION_DONE(163) 当运动完成
同步执行的程序一般放在Motion Task中执行,而不能放在Background Task或其他周期性执行的Task中,否则在系统等待命令执行完成过程中,可能会出现执行系统超时错误。关于执行系统的描述,请参考本书第10章。
2.命令的返回值(Return Value)
在运动控制命令(FC)执行时,会返回一个值,这个返回值为我们提供了功能调用的结果,并显示命令是按预期正确的执行了还是执行过程中出现了错误。比如位置轴的定位命令“_pos”的返回值是一个DINT类型的变量,不同的返回值反映了定位命令不同的执行状态。
Return value:DINT
Description of the return value:
0-No error,没有错误
1-Illegal command parameter,参数非法
2-Illegal range specification in command parameters,参数超限
3-Command aborted,命令取消
4……
3.CommandId
程序中与工艺对象(TO)相关的每个命令中都有一个名称为“CommandId”的输入参数,顾名思义,CommandId即是用于识别该TO命令的一个唯一的识别符,系统通过Com-mandId来帮助我们辨别和跟踪每一条TO指令的执行情况。
CommandId的数据类型是SIMOTION标准功能中预定义好的一个结构体“CommandId-Type”。该结构体可以在程序中直接引用,无须声明,它的内部程序代码如下:
输入参数CommandId是一个可选参数,如果没有为TO命令分配CommandId,那么默认的CommandId是(0,0);当然也可以为TO命令分配一个CommandId,那么该Id会与TO命令绑定,并作为查询TO命令状态的参考。当TO命令进入缓冲区后即可以查询该命令的状态,在TO命令执行完成后,命令会从缓冲区中消失,CommandId也随之消失。如果在TO命令执行完成后还需要保留它的状态,那么可以使用_buffer...CommandId系统功能来暂时保存该命令的执行状态,此时该TO命令继续占用缓冲区的空间,使用_remove-Buffered...CommandId系统功能可以再次释放缓冲区。命令缓冲区的大小可以在Axis的系统变量TypeOfAxis.DecodingConfig.NumberOfMaxBufferedCommandId中定义,默认为100。
在使用CommandId时,最常用的方法是首先使用_getCommandId系统功能生成一个项目内唯一的Id,再使用系统功能_getStateOf...Command来获取对应的TO命令的状态,比如_getStateOfAxisCommand、_getStateofOutputCAMCommand等。
下面举例说明该程序可以放在BackgroundTask中执行。
4.编程模型
在SIMOTION的执行系统中,包含多个不同执行优先级的任务,必须将程序分配到这些任务中来执行。与TO相关的指令最终都作用在了相应的工艺对象上,如图4-9所示。指令执行的效率完全取决于这条指令在工艺对象上执行所花费的时间,如果在多个任务中都包含有对同一对象的操作指令,那么用户程序必须确保程序执行的一致性。
5.执行属性
每一个TO可以有不同的执行属性,或称执行周期。TO的执行属性按同步执行等级不同可以分为以下几种:DP cycle clock、Servo cycle clock以及IPO cycle clock或IPO_2cycle clock(除温度控制器之外)。一般情况下,TO指令按照不同的执行等级进行处理:
1)指令解析和运动控制在IPO/IPO_2 cycle clock中处理;
2)位置控制和设定值的处理位于Servo cycle clock中;
图4-9 轴对象的编程模型
3)与底层驱动的PROFIBUS DP通信位于DP cycle clock,如果采用PROFINET IO的IRT通信,则位于PN cycle clock中。
此外,也可以在系统组态或者TO组态时对这些过程参数进行调整。在对整个SIMO-TION系统组态时可以设置系统循环时钟,也就是设置运动控制的采样时间(IPO或IPO_2)、位置控制的周期(Servo)和PROFIBUS DP或PROFINET IO IRT通信的循环周期。在SCOUT软件中,用鼠标右键单击SIMOTION设备,在弹出菜单里选择“Set System Cycle Clocks”,如图4-10所示,可以修改系统时钟。
当组态TO对象时,可以指定其运动控制是在Servo cycle clock中执行还是在IPO或IPO_2 cycle clock中执行。在固件版本为V4.2及以上的SIMOTION系统中,还可以选择Servo_fast和IPO_fast。比如轴Axis的执行周期可以在其配置画面中选择,如图4-11所示。
6.报警
工艺对象会时刻监视工艺功能的执行情况以及TO所需的一些IO的状态信息,在一些特定的事件发生时,会触发相应的工艺报警。每个工艺报警都有一个本地响应和一个全局响应。本地响应只对该TO本身有影响,如停止运动、去使能等,而全局响应则对其他TO和整个系统都有影响,如调用TechnologicalFaultTask、CPU停机等。
对于每一个报警,相应的响应有默认的设置。但是,可以调整这些设置来满足实际需求,比如通过指定其error activation属性来定义报警是立即激活、错误重复出现后激活,还是经过一段时间后激活,也可以屏蔽一些报警。
(1)工艺对象报警的配置方法
图4-10 设置系统循环时钟
图4-11 选择TO处理周期
在SCOUT软件中,打开项目后,可以通过报警配置画面来修改报警的默认设置。首先打开执行系统EXECUTION SYSTEM,在右侧窗口中依次打开“SystemInterruptTasks”→“TechnologicalFaultTask”,单击右侧的“Alarm configuration”按钮,弹出界面,如图4-12所示。
工艺对象报警配置画面各部分说明如下:(www.xing528.com)
1)选择要配置报警的工艺对象(轴,Cam,外部编码器等),可以选择所有轴或者单个轴。
2)单击“Export/Import”按钮(见图4-13),可以将工艺报警的配置以XML格式导入/导出。
3)接受对所有报警配置的修改。
图4-12 工艺对象报警配置
4)工艺报警编号。
5)报警文本显示。
6)类型共有4种,分别为Note、Error、Warning、Hidden。如设置为“Hidden”类型,报警信息不会显示。
7)全局响应的设置(Global response)。在这里可以设置工艺报警触发时,执行系统或其他工艺对象是如何响应的。可设置的响应类型如下:
①NONE:系统不做任何响应。
②STOP:系统进入STOP模式,在STOP模式下,所有工艺对象处在非激活状态,用户程序不再执行并且所有输出为0。
③STOP U:系统进入STOP U模式,工艺对象仍为激活状态并且可以进行测试和调试。其他方面,等同于STOP模式。
④START TechnologicalFaultTask:当报警触发时,“TechnologicalFaultTask”被执行。分配给此任务的程序开始运行。如果在“TechnologicalFaultTask”中没有分配程序,则系统进入STOP模式。
8)本地响应的设置(Local reaction)。这个设置决定了报警的工艺对象本身接下来会执行何种动作,如图4-13所示。例如,当一个定位轴产生工艺报警时,可以选择是立即取消该轴正在执行的指令或者令轴按照指定的斜坡停车。根据工艺对象的不同,local reaction会有不同的设置,下面以轴为例介绍:
①NONE:无反应。
②DECODE_STOP:正在执行的命令被停止;当前运动和motion buffer中的命令继续执行;新运动指令被拒绝。
③END_OF_MOTION_STOP:在激活的运动命令完成之后停止。
④MOTION_STOP:按照指令中设定的值停车。
⑤MOTION_EMERGENCY_STOP:按照最大加速度极限值停车。
⑥MOTION_EMERGENCY_ABORT:按照最大加速度极限值停车并且取消激活的指令。
⑦FEEDBACK_EMERGENCY_STOP:按照快速停车的斜坡停车并且取消激活的指令。
⑧OPEN_POSITION_CONTROL:按照速度设定值为0停车并且取消激活的指令。
⑨RELEASE_DISABLE:轴去使能停车并且取消当前激活的指令。
图4-13 工艺对象报警配置
9)Time when error was triggered。当故障发生时,选择如何或者何时触发报警,可设置的选项如下:
①Direct triggering:在错误发生后,报警响应被直接执行。
②Delayed triggering:报警响应经过延时后被执行。在“Error repeatability”或者“Error reaction time”中,选择报警触发在错误发生几次或是经过一段时间之后。
10)Error repeatability。选择错误重复多少次之后报警响应被执行。
①no_time:当错误发生时报警立即被激活。
②time_n:当错误重复出现n次之后,报警被激活。
11)Error reaction time。选择错误发生与报警响应触发之间的时间间隔。
①no_time:当错误发生时报警立刻触发。
②time_n:错误发生后经过n毫秒报警被触发。
12)Alarm group association。显示TO报警被分配的相应报警组。
(2)报警响应的配置示例
下面以轴报警“40003:Programmed acceleration(type:/1/%d)is limited”为例进行说明。当轴运动时的加速度设定值超过TypeOfAxis.MaxAcceleration.maximum中的值时,会触发此报警,该报警的默认设定如图4-14所示。
图4-14 报警响应的配置示例
A_Type:Note B_Local Reaction:None
按照默认设定,当轴的设定加速度大于极限加速度时,报警会以“Note”的形式出现,但不会对轴进行任何额外的操作,轴仍旧会继续运动,报警显示如图4-15所示。
图4-15 报警显示
修改A、B处的报警配置,Type:Error,Local Reaction:MOTION_STOP,如图4-16所示。
图4-16 修改报警配置
当轴的设定加速度大于极限加速度时,报警会以“Error”的形式出现,同时轴会按照指令中设定的减速度停车,报警显示如图4-17所示。
图4-17 报警显示
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。