各位大神们?请问一下怎样读取西门子s7 300编程软件-200位置控制模式下Q0.0在不同的包络中发出的脉冲频率呢?

西门子S7-200子程序,多次调用的“怪”现象
西门子S7-200子程序,多次调用的“怪”现象
&在S7-200编程中,子程序想必大家都用过,使用子程序可以更好地组织程序结构,便于阅读和调试,也可以缩短程序代码。但是使用子程序也有一些需要注意的地方,除了子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,还有子程序中局部变量的特点,在编程多次调用带参数子程序时要特别注意。下面就是前些天热线上遇到的一个Case,非常有代表性,在这里跟大家分享。
E:您好,西门子技术支持。
C:您好,我想问下,200子程序是不是多次调用时会不好使?
E:不会啊,您是不是在子程序里使用了沿指令或者定时器?
C:没有啊,我就编了一句很简单的开关程序,开关闭合,线圈导通,然后主程序里调用了两次这个子程序,结果第一个I点闭合了,两个Q点都导通了。
E:(心里活动:看来是和子程序的局部变量有关了,估计客户程序逻辑有问题)那请您描述一下您的子程序吧,我帮您看看。
于是客户描述了一下自己的程序,大致了解了之后告知客户我这边测试下,稍后回复。
客户的程序是这样的:
子程序:是个常见的自保持逻辑,接口参数如红框所示。
主程序:调用了两次上面的子程序,实现I0.0和I0.1控制Q0.0的闭合和断开,I0.2和I0.3控制Q0.1的闭合和断开。
那么在线测试下程序执行情况,发现果然如客户所描述的,I0.0为1后,Q0.0和Q0.1都为1了。见下图.03所示。而如果闭合I0.2,则Q0.0和Q0.1都断开。
为什么会这样呢?首先我们先明确子程序局部变量的特点。局部变量的变量类型分为四种: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,这种类型的参数是先读入,然后再写出,这里我们就可以利用它的特点解决上面的问题。
下面对子程序的参数进行修改,将原先的#CC变量类型改为IN_OUT。如下图所示:
主程序结构不变,如下所示,可以看到由于#CC的类型是IN-OUT,它在子程序块的接口位置也转到了左侧输入侧。
下面再次将I0.0置1,其他输入都为0,监控程序状态,如图.07所示,可以看到只有Q0.0为1,Q0.1状态为0。而如果将I0.1置1,
Q0.0被复位,Q0.1还是0,这样就符合客户的控制要求了。
同样,如果只给I0.2置1,那么也只有Q0.1会亮,不会再影响Q0.0。
了解了IN_OUT类型变量的特点,就不难分析以上的结果。因为每次调用子程序时,局部变量#CC都会先去读取输入参数Q0.0或Q0.1的状态,所以即使两次调用子程序时,#CC变量使用的同一区域,该区域的值也会在开始被Q点的状态所修改,就不存在两次调用相互影响的情况了。
另外,如果在子程序一开始就添加一条指令,对局部变量#CC进行赋初值(如图.08),也可以避免临时变量区数值不定的问题,您可以尝试测试下
所以,在编写200子程序时要特别注意局部变量的特点,一旦出现多次调用不正常的情况,就可以从局部变量的特点出发分析,看看是不是存在隐患。善加利用IN_OUT变量也许可以解决许多问题。
&更多技术资料,请加微信公众帐号“gongkong8”&
====================================
工控老鬼技术Blog:.cn/wincchome
启程自动化培训中心
联系电话:2/2
工控老鬼QQ空间 :
启程 PLC培训 深圳PLC培训 启程PLC培训
宝安PLC培训西门子PLC培训 S7-200培训 S7-300培训 系统集成培训 自动化培训 WINCC培训
====================================
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。西门子S7-200驱动步进电机心得_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
西门子S7-200驱动步进电机心得
上传于||文档简介
&&西​门​子​S-0驱​动​步​进​电​机​心​得
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
你可能喜欢每日登录:+1西币&+1积分
用户登录 |
密&&&&码:
记住用户名
下次自动登录
&&建议您只在个人私有的电脑上使用此选项。
绑定第三方账号登录&&
扫描二维码登录支持中心移动端
You are here:
200smart 怎么控制很多个伺服
手机登录找答案
热点活动:
已解决问题:
200smart 怎么控制很多个伺服
我想用一套smart&200&控制12个伺服电机&上边连接人机界面&监控&命令伺服
问题补充:能不能用通讯之类的方法实现呢
产品版区:
悬赏分:5 | 解决时间: 10:05:50 | 提问者: -
问题ID:121086
用发脉冲方法控制伺服驱动器,Q0.0发送脉冲Q2.0控制方向,以此类推,看plc有几个高速脉冲口也可以用总线,什么modbus,profibus,canopen都可以,plc上扩展相应的通信模块就可以了
提问者对于答案的评价:谢谢
已阅,最佳答案正确。
置评专家:西门子自动化产品支持& 09:34:18
更多相关问题
本版精华问答
等待您来回答
作者/最新回复
最后回复时间
单台200&smart的特性,只能控制3个伺服轴!CPU&模块本体最多集成3&路高速脉冲输出,频率高达100&kHz,支持PWM/PTO输出方式以及多种运动模式,可自由设置运动包络。配以方便易用的向导设置功能,快速实现设备调速、定位等功能。&CPU&本体上的Q0.0,Q0.1&和Q0.3&可组态为PWM&输出或高速脉冲输出,均可通过向导设置完成上述功能!你要用smart&&来控制12个轴,需要4台!可以使用300plc+伺服模块来实现,这样成不应该低些。硬件布线,编程都简便!
专家奖励分:10分
& 17:10:15
上一页1下一页&
20秒帮我们优化支持中心!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
欢迎您来到找答案
在“找答案”,已有超过7万个被解决的技术问题供您参考!
西门子技术专家亲自把关!常规的,简单的问题,在这里您都可以找到答案!
遇到了问题,就来“找答案”提问。
点击搜索框右侧的提问按钮,只需2步就能成功提交问题!分分钟就有无数大侠前来帮你。
在“找答案”每天都有大量的新问题。
别犹豫,只需要点击问题下方的“我要回答”就能参与。答题不光有积分相送,也会给您积攒大侠人气。
“找答案”定期开展各种有奖活动期待您的参与。
更有机会参加西门子高端用户峰会。领略西门子的博大精深!S7-200pto向导包络_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
S7-200pto向导包络
上传于||文档简介
&&S-0p​t​o​向​导​包​络
大小:592.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 西门子s7 200仿真软件 的文章

 

随机推荐