公司服务、热情周到做人诚信信誉
公司产品、保证全新原装进口
公司流程、保证安全准时发货
公司服务、保证售后服务质量
公司制度、客户确认所需产品型号
公司名称、上海庆惜自动化设备有限公司
公司代理、西门子人机界面、西门子变频器 、西门子伺服系统、西门子数控系统、西门子电机、西门子工业通信、西门子楼宇控制 、西门子电气设备、西门子自动化设备、西门子机电设备的安装、西门子电气设备及配件、数控设备及配件、机电设备、工程机械设备及配件、电线电缆、自动化成套设备及配件、低压电器元件、西门子S7-200 300 400 1200 1500 、西门子触摸屏 西门子直流调速器、西门子电源、西门子各种系列、打造高品质产品、是我永远的追求。

西门子S7-200子程序,多次调用的现象
在S7-200编程中,子程序想必大家都用过,使用子程序可以更好地组织程序结构,便于阅读和调试,也可以缩短程序代码。但是使用子程序也有一些需要注意的地方,除了子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,还有子程序中局部变量的特点,在编程多次调用带参数子程序时要特别注意。下面就是前些天热线上遇到的一个Case,非常有代=
E:您好,西门子技术支持。
C:您好,我想问下,200子程序是不是多次调用时会不好使?
E:不会啊,您是不是在子程序里使用了沿指令或者定时器?
C:没有啊,我就编了一句很简单的开关程序,开关闭合,线圈导通,然后主程序里调用了两次这个子程序,结果个I点闭合了,两个Q点都导通了。
E:(心里活动:看来是和子程序的局部变量有关了,估计客户程序逻辑有问题)那请您描述一下您的子程序吧,我帮您看看。
于是客户描述了一下自己的程序,大致了解了之后告知客户我这边测试下,稍后回复。
客户的程序是这样的:
子程序:是个常见的自保持逻辑,接口参数如红框所示。
先我们先明确子程序局部变量的特点。局部变量的变量类型分为四种:IN,IN_OUT,OUT和TEMP,局部变量存储区是在子程序调用时开辟的,子程序调用完成,局部变量占用的存储空间释放。
我们来分析下客户的子程序。
在主程序次调用子程序时,如果I0.0为1,I0.1为0,它们将自身值分别传给输入局部变量#AA和#BB,子程序中程序逻辑执行如下图.04所示。此时局部变量#CC值为1,子程序完成,#CC将值传送到输出参数Q0.0上,使其置1。根据局部变量的特点,子程序次调用完成后,局部变量存储区释放。
那么当主程序第二次调用该子程序时,开辟临时存储空间,但是此时的存储空间与次调用时开辟的不一定一致。可是,也有可能由于程序简单,仍然使用次调用时占用的存储空间。如果这种情况发生了,那么次调用时已经将#CC的L0.2置了1,而此值依旧存在,那么第二次调用时虽然输入参数I0.2和I0.3为0 ,但是#CC(L0.2)为1,由于客户的子程序逻辑有自保持部分,所以后L0.2的逻辑结果仍然是1。子程序完成后,#CC将值传送到输出参数Q0.1上,使其置1。所以就会出现客户反映的那种问题。
那么该如何避免这种情况呢?
大家是否还记得刚刚介绍局部变量参数类型时除了IN, OUT类型外,还有一种类型叫IN_OUT,这种类型的参数是先读入,然后再写出,这里我们就可以利用它的特点解决上面的问题。
同样,如果只给I0.2置1,那么也只有Q0.1会亮,不会再影响Q0.0。
了解了IN_OUT类型变量的特点,就不难分析以上的结果。因为每次调用子程序时,局部变量#CC都会先去读取输入参数Q0.0或Q0.1的状态,所以即使两次调用子程序时,#CC变量使用的同一区域,该区域的值也会在开始被Q点的状态所修改,就不存在两次调用相互影响的情况了。
另外,如果在子程序一开始就添加一条指令,对局部变量#CC进行赋初值(如图.08),也可以避免临时变量区数值不定的问题,您可以尝试测试下
1、概述
S7--200提供了三种方式的开环运动控制:
• 脉宽调制(PWM)--内置于S7--200,用于速度、位置或占空比控制。
• 脉冲串输出(PTO)--内置于S7--200,用于速度和位置控制。
• EM253位控模块--用于速度和位置控制的附加模块。
S7—200的内置脉冲串输出提供了两个数字输出通道(Q0.0和Q0.1),该数字输出可以通过位控向导组态为PWM或PTO的输出。
当组态一个输出为PTO操作时,生成一个50%占空比脉冲串用于步进电机或伺服电机的速度和位置的开环控制。内置PTO功能仅提供了脉冲串输出。您的应用程序必须通过PLC内置I/O或扩展模块提供方向和限位控制。
PTO按照给定的脉冲个数和周期输出一串方波(占空比50%),如图1。
PTO可以产生单段脉冲串或者多段脉冲串(使用脉冲包络)。可以脉冲数和周期(以微秒或毫秒为增加量):
• 脉冲个数: 1到4,294,967,295
• 周期: 10μs(100K)到65535μs或者2ms到65535ms。
200系列的PLC的大脉冲输出频率除 CPU224XP 以外均为20kHz。CPU224XP可达100kHz。如表1所示:
2.1 MAP库的基本描述
现在,200系列 PLC 本体 PTO 提供了应用库MAP SERV Q0.0 和 MAP SERV Q0.1,分别用于 Q0.0 和 Q0.1 的脉冲串输出。如图2所示:
注: 这两个库可同时应用于同一项目。
各个块的功能如表2所示:
体描述
该功能块可驱动线性轴。
为了很好的应用该库,需要在运动轨迹上添加三个限位开关,如图3:
• 一个参考点接近开关(home),用于定义位置 C_Pos 的零点。
• 两个边界限位开关,一个是正向限位开关(Fwd_Limit),一个是反向限位开关(Rev_Limit)。
• 位置 C_Pos 的计数值格式为 DINT ,所以其计数范围为(-2.147.483.648 to +2.147.483.647).
• 如果一个限位开关被运动物件触碰,则该运动物件会减速停止,因此,限位开关的安置位置应当留出足够的裕量∆Smin 以避免物件滑出轨道尽头。
2.2 输入输出点定义
应用MAP库时,一些输入输出点的功能被预先定义,如表3所示:
2.3 MAP库的背景数据块
为了可以使用该库,必须为该库分配 68 BYTE(每个库)的全局变量,右击程序块->库存储区,如图4所示:
下表是使用该库时所用到的重要的一些变量(以相对地址表示),如表4:
2.4 功能块介绍
下面逐一介绍该库中所应用到的程序块。这些程序块全部基于PLC-200 的内置PTO输出,完成运动控制的功能。此外,脉冲数将通过的高速计数器 HSC 计量。通过 HSC 中断计算并触发减速的起始点。
2.4.1 Q0_x_CTRL
该块用于传递全局参数,每个扫描周期都需要被调用。功能块如图5,功能描述见表5。
该功能块用于寻找参考点,在寻找过程的起始,电机首先以 Start_Dir 的方向,Homing_Fast_Spd 的速度开始寻找;在碰到limit switch (“Fwd_Limit” or “Rev_Limit”)后,减速至停止,然后开始相反方向的寻找;当碰到参考点开关(input I0.0; with Q0_1_Home: I0.1)的上升沿时,开始减速到 “Homing_Slow_Spd”。如果此时的方向与 “Final_Dir” 相同,则在碰到参考点开关下降沿时停止运动,并且将计数器HC0的计数值设置为“Position” 中所定义的值。
如果当前方向与 “Final_Dir” 不同,则必然要改变运动方向,这样就可以保证参考点始终在参考点开关的同一侧(具体是那一侧取决于 “Final_Dir”)。
寻找参考点的状态可以通过全局变量 “Homing_State” 来监测,如表9:
2.4.5 Q0_x_MoveRelative
该功能块用于让轴按照的方向,以的速度,运动的相对位移。功能块如图9,功能描述见表10。
2.4.6 Q0_x_MoveAbsolute
该功能块用于让轴以的速度,运动到的位置。功能块如图10,功能描述见表11。
2.4.7 Q0_x_MoveVelocity
该功能块用于让轴按照的方向和频率运动,在运动过程中可对频率进行更改。功能块如图11,功能描述见表12。
注意:使用该块将使得原参考点失效,为了清晰地定义位置,必须重新寻找参考点。
2.5 校准
该块所使用的算法将计算出减速过程(从减速起始点到速度终达到Velocity_SS)所需要的脉冲数。但时在减速过程中所形成的斜坡有可能会导致计算出的减速斜坡与实际的包络不完全一致。此时就需要对 “Tune_Factor” 进行校正。
校正因子 “Tune_Factor”,“Tune_Factor” 的优值取决于大、小和目标脉冲频率以及大减速时间。如图15:
如图所示,运动的目标位置是B,算法会自动计算出减速起始点,当计算与实际不符时,当轴已经运动到B点时,尚未到达低速度,此时若位 ”Disable_Auto_Stop” = 0,则轴运动到B点即停止运动,若位 ”Disable_Auto_Stop” = 1,则轴会继续运动直至到达低速度。图中所示的情况为计算的减速起始点出现的太晚了。
确定调整因子
注意:一次新的校准过程并不需要将伺服驱动器连接到CPU。 步骤如下:
1. 置位 ”Disable_Auto_Stop”,即令 ”Disable_Auto_Stop” = 1。
2. 设置 “Tune_Factor” = 1。
3. 使用 Q0_x_LoadPos 功能将当前位置的位置设为0。
4. 使用 Q0_x_MoveRelative,以的速度完成一次相对位置运动(留出足够的空间
以使得该运动得以顺利完成)。
5. 运动完成后,查看实际位置 HC0。Tune_Factor 的调整值应由 HC0,目标相对位移
Num_Pulses,预估减速距离 Est_Stopping_Dist 所决定。Est_Stopping_Dist 由下面的公式计算得出:
6. 在调用 Q0_x_CTRL 的网络之后插入一条网络,将调整后的 Tune_Factor 传递给全
局变量 +VD1,如图16
7. 复位 ”Disable_Auto_Stop”,即令 ”Disable_Auto_Stop” = 0。
2.6 寻找参考点的若干种情况
在寻找参考点的过程中由于起始位置、起始方向和终止方向的不同会出现很多种情况。
一个的原则就是:从起始位置以起始方向 Start_Dir 开始寻找,碰到参考点之前若碰到限位开关,则立即调头开始反向寻找,找到参考点开关的上升沿(即刚遇到参考点开关)即减速到寻找低速 Homing_Slow_Spd,若在检测到参考点开关的下降沿(即刚离开遇到参考点开关)之前已经减速到 Homing_Slow_Spd,则比较当前方向与终止方向 Final_Dir 是否一致,若一致,则完成参考点寻找过程;若否,则调头找寻另一端的下降沿。若在检测到参考点开关的下降沿(即刚离开遇到参考点开关)之前尚未减速到 Homing_Slow_Spd,则在减速到 Homing_Slow_Spd 后调头加速,直至遇到参考点开关上升沿,重新减速到
Homing_Slow_Spd,后判断当前方向与终止方向 Final_Dir 是否一致,若一致,则完成参考点寻找过程;若否,则调头找寻另一端的下降沿。(Final_Dir 决定寻找参考点过程结束后,轴停在参考点开关的哪一侧)
下面的图形
会反应不同情形下寻找参考点的过程。