电子开发 | 基础入门 | 电路原理图 | 婵犳鍠栭オ鎾垂娴煎瓨鍤嬪ù鍏兼綑閻愬﹪鏌熼鍡楁噺濠㈡牗绻涢幘瀵稿暡闁瑰嚖鎷� | PLC闂備胶纭堕弲鐐测枍閿濆鈧線鏁撻敓锟�   闂備線娼уΛ妤呮晝閵堝鈧懓顦圭€殿喚枪楗即宕橀埡鍐х钵婵犵數鍋涘Λ搴ㄥ垂閸濆嫸鑰块柟娈垮枤閸楁碍绻涢崱妯兼噮缂佲偓婢舵劖鍋i柛銉墯閺侀亶鎮楃喊澶嬪 Ctrl+D 闂備礁缍婂ḿ褔顢栭崨顔藉弿闁冲搫鎳庣紒鈺呮煙椤栨粌顣兼い銉﹀灴閺屻劌鈽夊Δ鍐ㄥ闂佸憡鏌ㄩ幊鎰板箯椤愶箑顫呴柍銉ュ帠閹查箖姊哄Ч鍥у閻庢凹鍙冨顐︻敋閳ь剟鐛幇顓熷缁剧増锚娴滈箖鏌ㄩ悤鍌涘濠电偞鍨堕幐鎾磻閹剧粯鍋g憸宥夊床閺屻儺鏁嗛柣鏂挎憸閳绘洟鏌eΟ澶稿惈妞ゅ繘浜堕幃纭咁槾闁哄苯顦遍幑銏犖熸笟顖涙〃闂侀潧顦介崹宕囩矆婢舵劖鐓熼柕蹇嬪€栧☉褔鏌i埄鍐噧妞ゆ洩缍侀崺鈧い鎺戝閻鏌熺€电ǹ孝缂佹梻鍋撶换娑㈠幢閹邦剛浼囩紓浣筋嚙椤戝鐛崘顔光偓锕傚箳閺冨偊绱�.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

闂備礁鐤囧Λ鍕箠閹版澘鏋侀柛婵勫劜瀹曞銇勯弽銊ㄥ鐟滄澘妫涢埀顒侇問閸犳牜鎹㈤幋鐐存珷婵犲﹤鐗嗙粈鍐偓鍏夊亾閻庯綆鍓涢ˇ顕€姊洪崫鍕闁稿鎹囬弻锟犲磼濞戞﹩妫嗘繝鈷€鍕垫疁濠碘€崇摠缁绘繈宕熼浣圭槑闂佽瀛╃粙鎺楀礉濡ゅ懎鏋侀柛婵勫劜瀹曞銇勯弽銊ㄥ鐟滄澘妫涢埀顒侇問閸犳牜鎹㈠Δ鍜佹晣闁告縿鍎虫稉宥嗕繆閵堝倸浜惧┑鐐叉噺鐢剝淇婄€电硶鍋撻敐鍛暢缂佲偓婢舵劖鐓熸い顐幘缁佺兘鏌i銏㈢暫鐎规洘顨婇、妤呭焵椤掑倹顫曢柨鐔哄Т閽冪喖鏌曟径妯煎帥闁搞倕瀚伴弻鐔兼濞戝崬鍓伴梺鍝ュ剳閹凤拷 闂備焦妞垮鈧紒鎻掝煼閹本銈i崘銊ь槯濡炪倖宸婚崑鎾剁磼閹插纾块柟宄邦儔閺佸秹宕熼鐔哥槗闂備線娼荤徊濠氬礉婵犲洤鐒垫い鎺嶇婵鏌℃担鍛婃喐闁逞屽墯缁嬫帡宕濋幒鏂垮灊闁绘ê纾埢鏃€鎱ㄥ鍡椾簼闁活亙绮欓弻娑樷槈濞咁収浜為幑銏ゅ焵椤掆偓椤法鎹勯悜妯侯槱婵犫拃鍕煉鐎规洘岣挎禒锕傛倻閳轰椒澹曢梺璺ㄥ櫐閹凤拷
闂備礁鐤囧Λ鍕涘Δ鈧悾鐑藉礋椤掆偓缁剁偤鏌嶆潪鎵窗闁告柨鎳庨湁闁稿繗澹堟竟妯尖偓瑙勬礈閸犳牠骞冭瀹曞爼濡搁敂鍓ф闂佽楠稿﹢閬嶅磻濡吋顐介柨鐕傛嫹100 c闂佽崵濮村ù鍌炲矗閳ь剟鏌嶆导娆愬 chm闂備礁鎼粔鍫曞储瑜忓Σ鎰版晸閻樺弬銉╂煕鐏炲墽绠橀柕鍫亰閺岋繝宕掑☉姘櫑闂佸摜鍋涢顓㈠焵椤掆偓濠€閬嶃€佹繝鍥舵晪婵炴垶姘ㄧ壕濂告煕閳藉棗骞樼紒鈧径鎰仭闁哄洨鍋為ˉ鐘崇箾閹绘帪鏀荤紒妤冨枔閳ь剨缍嗘禍鐐哄箺瀹ュ拋鐔嗛柤鍝ユ暩閸熻尙绱掓潏銊х疄鐎规洘锕㈠畷銊╊敇瑜嶉弲锝呂旈悩闈涗哗闁跨喆鍎甸崺鈧い鎺嶇婵鏌℃担鍛婃喐闁逞屽墯缁嬫帡宕濋幒鏂垮灊闁绘ê纾埢鏃€鎱ㄥ鍡椾簼闁活亙绮欓弻娑樷槈濞咁収浜為幑銏ゅ焵椤掆偓椤法鎹勯悜妯侯槱婵犫拃鍕煉鐎规洘岣挎禒锕傛倻閳轰椒澹曢梺璺ㄥ櫐閹凤拷
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> plc工业软件使用 >> 正文

西门子S7-200子程序,多次调用的“怪”现象

作者:佚名    文章来源:本站原创    点击数:1927    更新时间:2023/8/5

西门子S7-200子程序,多次调用的“怪”现象

在S7-200编程中,子程序想必大家都用过,使用子程序可以更好地组织程序结构,便于阅读和调试,也可以缩短程序代码。但是使用子程序也有一些需要注意的地方,除了子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,还有子程序中局部变量的特点,在编程多次调用带参数子程序时要特别注意。下面就是前些天热线上遇到的一个Case,非常有代表性,在这里跟大家分享。

E:您好,西门子技术支持。
C:您好,我想问下,200子程序是不是多次调用时会不好使?
E:不会啊,您是不是在子程序里使用了沿指令或者定时器?
C:没有啊,我就编了一句很简单的开关程序,开关闭合,线圈导通,然后主程序里调用了两次这个子程序,结果第一个I点闭合了,两个Q点都导通了。
E:(心里活动:看来是和子程序的局部变量有关了,估计客户程序逻辑有问题)那请您描述一下您的子程序吧,我帮您看看。
于是客户描述了一下自己的程序,大致了解了之后告知客户我这边测试下,稍后回复。
客户的程序是这样的:
子程序:是个常见的自保持逻辑,接口参数如红框所示。

 

图. 01

主程序:调用了两次上面的子程序,实现I0.0和I0.1控制Q0.0的闭合和断开,I0.2和I0.3控制Q0.1的闭合和断开。

 

图. 02

那么在线测试下程序执行情况,发现果然如客户所描述的,I0.0为1后,Q0.0和Q0.1都为1了。见下图.03所示。而如果闭合I0.2,则Q0.0和Q0.1都断开。
 

图. 03

为什么会这样呢?首先我们先明确子程序局部变量的特点。局部变量的变量类型分为四种:IN,IN_OUT,OUT和TEMP,局部变量存储区是在子程序调用时开辟的,子程序调用完成,局部变量占用的存储空间释放。
我们来分析下客户的子程序。
在主程序第一次调用子程序时,如果I0.0为1,I0.1为0,它们将自身值分别传给输入局部变量#AA和#BB,子程序中程序逻辑执行如下图.04所示。此时局部变量#CC值为1,子程序完成,#CC将值传送到输出参数Q0.0上,使其置1。根据局部变量的特点,子程序第一次调用完成后,局部变量存储区释放。

 
图. 04
那么当主程序第二次调用该子程序时,开辟临时存储空间,但是此时的存储空间与第一次调用时开辟的不一定一致。可是,也有可能由于程序简单,仍然使用第一次调用时占用的存储空间。如果这种情况发生了,那么第一次调用时已经将#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。如下图所示:

 
图. 05

主程序结构不变,如下所示,可以看到由于#CC的类型是IN-OUT,它在子程序块的接口位置也转到了左侧输入侧。

 

图. 06
下面再次将I0.0置1,其他输入都为0,监控程序状态,如图.07所示,可以看到只有Q0.0为1,Q0.1状态为0。而如果将I0.1置1, Q0.0被复位,Q0.1还是0,这样就符合客户的控制要求了。

 

图. 07

同样,如果只给I0.2置1,那么也只有Q0.1会亮,不会再影响Q0.0。
了解了IN_OUT类型变量的特点,就不难分析以上的结果。因为每次调用子程序时,局部变量#CC都会先去读取输入参数Q0.0或Q0.1的状态,所以即使两次调用子程序时,#CC变量使用的同一区域,该区域的值也会在开始被Q点的状态所修改,就不存在两次调用相互影响的情况了。
另外,如果在子程序一开始就添加一条指令,对局部变量#CC进行赋初值(如图.08),也可以避免临时变量区数值不定的问题,您可以尝试测试下

 
图. 08
所以,在编写200子程序时要特别注意局部变量的特点,一旦出现多次调用不正常的情况,就可以从局部变量的特点出发分析,看看是不是存在隐患。善加利用IN_OUT变量也许可以解决许多问题。
 


 


Tags:子程序调用,子程序,step7,S7-200  
责任编辑:admin
相关文章列表
如何在西门子S7-200SMART编程软件里面添加库文件指令?
V4.0 STEP 7 MicroWIN 西门子S7-200系列PLC高阶课程-1 子程序
V4.0 STEP 7 MicroWIN 的PID给定-反馈量程设置
STEP7 Micro/WIN指令库-用户自定义
STEP7关于S7-200 SMART模拟量,组态通信软件设置
西门子系统块提供S7-200 SMART CPU、信号板和扩展模块的组态
西门子PLC组态模拟量输出 组态设置
STEP 7-MicroWIN SMART西门子200smartPLC和编码器进行高速计数程
西门子STEP7编程软件的功能及使用 STEP7-Micro/WIN32
Step7编程软件的应用窗口 SIMATIC Manager软件
穷学上位机系列——搭建STEP7仿真环境 SIMATIC Manager软件仿真
Modbus RTU通信教程 STEP 7-MicroWIN SMART软件 从站的配置及编程
西门子S7-200 Smart PLC入门笔记8——电机控制子程序调用 子程序
PLC200入门笔记1-软件安装和程序下载 STEP7软件下载和安装
西门子plc S7-200smart PLC模拟量输入模块使用说明,STEP7软件添
S7-200 SMART plc数字量输入滤波器和脉冲捕捉位,STEP7设置
一文教你S7-200SMART PLC的程序编程、下载和调试监控,STEP7软件
怎么设置step7的PG/PC接口,STEP7软件设置
STEP 7-Micro/WIN方便有效的快捷键
STEP 7-MicroWIN SMART V2.3软件的安装及使用,STEP7快捷键
【STEP7软件实例】S7-200SMART运动向导组态就是这么简单,你们学
plc梯形图怎么看对错,step7编程看错
STEP 7中操作数的表示法
STEP7怎样使用多重背景数据块?
PLC多重背景数据块使用,发动机组控制系统梯形图实例
STEP7模拟量与工程量转换程序
STEP 7设计顺序控制程序的基本方法
STEP7中功能块的属性说明
西门子STEP7单序列的编程方法
西门子STEP7选择序列和并行序列的编程方法
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
闂佹眹鍨藉ḿ褔鎮哄▎蹇e殨闁逞屽墴瀹曪綁骞嬮悩鐢敌ч梺鎸庣⊕绾板秹鎯囪ぐ鎺撯挅闁糕剝鐟﹂崑鍛存煕濮橆剛澧曢柟顔兼川閻氶箖鎳¢妶鍡樻瘎闁诲孩绋掗崝鏇㈠春濡や焦濯存繝濞惧亾缂佹鐭傞幃鑺ユ媴閸愵亞鍞撮梺鎼炲劚婢ц棄鈻撻幋鐘电>闁瑰濮疯ぐ鏌ユ煥濞戞﹩鍞筶c閻庤鎮堕崕鑼暜閸洖绠柍褜鍓熷鐢告晸閿燂拷,濠碘槅鍨界槐鏇㈠极閹间礁鏋侀柟娈垮枟閺嗏晠鏌i婊冨姤闁伙讣鎷�,闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夌紒鈥宠唺A缂備焦绋戦ˇ閬嶆偤閹达附鏅ù锝堟閻ゎ噣鏌﹂埀顒勫礃椤忓懏姣勯柣鐘辫閸ㄦ澘霉濡偐纾鹃柟瀵稿Х瑜拌尙绱掗钘夊姢鐎规洘娲熼弫宥囦沪閼规壆顦伴悗瑙勬偠閸庢娊鍩㈤懖鈺傛殰闁割偅绻傞悘锟犳⒑椤愩倕小闁绘粠鍨跺畷鎰箔鐞涒€充壕闁稿本渚楅崑銊╁级閳轰線顎楅柛娅诲啠鏋栭柕濞垮劙缁ㄥ啿菐閸ワ絺鍋撻崘鎻掔稻婵炴潙鍚嬮〃鍛般亹閸ф鏅慨妯块哺閺嗏晠鎮楀☉娆忓缂佽鲸鍨垮畷锝夊箣閻樼數效闂佹寧鍐婚幏锟�
最新推荐
闁荤姍鍐仾闁哄绻濆畷鐘诲川椤掑倻鎲柡澶屽剳閹凤拷
 [闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夊Δ锕佹硶閵堫偊鏌¢崒锔藉]闂佸憡銇炵粈渚€濡垫径灞稿亾濞戝磭绱扮紒鍙樺嵆瀹曪繝寮撮悩宸毈闂佸搫鐗嗛幖顐︽偪閸曨剛鐟归柨鐕傛嫹100 c闁荤姴娴勯幏锟�
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]婵炴垶鎸搁ˇ瀹犮亹缁€鐑睠闁诲孩鍐荤紓姘卞姬閸曨剛顩烽悹鎭掑妽閸╁倿寮堕悜鍡楃仧婵炲棭鏁-TR
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]LM324闁哄鏅滈崝鏍棘閿燂拷4~20mA闁哄鍎戦幏锟�1~5V闂佹眹鍨归悘姘辩矈閿燂拷
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]LM386婵$偛婀辩划顖炴倵椤掍焦濯撮柟鎹愵嚙椤斿﹪鏌涜箛鎿冨剶妞ゃ儲鎹囧銊╁箚瑜嬫禍锝夋煕閿濆啫濡奸悽顖ゆ嫹
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]936闂佺粯甯掗敃銈堛亹閹绢喗鍋ㄥù锝呭暟閻斿懘鏌涘Ο鐓庢灁闁诡喖锕畷鍫曟晸閿燂拷
 [闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夊Δ锕佹硶閵堫偊鏌¢崒锔藉]闁烩剝甯掗幊搴ㄦ晬閹邦兘鏋栭柕蹇ョ磿閵堟挳鎮归悮瀛樺+濠电偞鎸撮弲娑氣偓鐧告嫹+闂佺缈伴崕鎾敆閻斿吋鍎嶉柛鏇ㄥ亜缁€锟�
 [闂備緡鍋呭銊╁极閵堝鍋ㄩ梻鍫熺〒閹藉秹鎮规担鐟扮妞ゆ挸鎲″ḿ顏堫敍濞嗘劦鍋�]S7-200PLC闂佹眹鍔岀€氼亞鎸掗姀銈嗗剳闁绘梹妲掗幏顐⒚归悪鍛 S7_2
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]S7-200闁圭厧鐡ㄩ幐濠氬几閸愨晝顩烽悹浣告贡缁€鍕煕韫囷絿鍘滅紒鎲嬫嫹,STEP7
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]ModbusPoll闂佸憡绮岄鐖媎busSalve闂佺ǹ楠忛幏锟�
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]STEP7濠碘槅鍨崜婵堚偓姘懇閺屽矁绠涢弬璺ㄦ▌婵炲濮伴崐鏇犺姳閿燂拷 Smart_
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]Modbus闁荤姴顑呴崯鎶芥儊椤栨粌鍨濋柛鎾楀倻瑙� v1.024 缂傚倷绶ら幏锟�
 [闁哄鍎愰崹顖氣枎閵忋垻灏甸柨鐕傛嫹]Modscan32闂佸憡绮岄鐖媎sim32,modb
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]89c51闂佺ǹ绻愰ˇ閬嶆偟濞戙垹妫橀梺顐g闂嗗綊鏌i鍡楁珢缂佽鲸鐛otues
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]婵炴垶鎸稿ú銈夊礋妤e啫鍌ㄩ柛鐐村Оotues婵炲濮惧▔鏇烇耿閿涘嫮鐭欓悗锝庝簽绾板秵绻濊閸旀鎮ラ敓锟�
 [闂佹椿婢€缁插鎯岄悙顒傤浄閻犳亽鍔嶉崺鍌炴偣娴g懓绀冩い鎿勬嫹]51闂佸憡顨嗗ú婊勬櫠閺嶎厼瀚夐柛婵嗗閸у﹦绱掔€h埖瀚� protues婵炲濮惧▔鏇烇耿閿燂拷
闂佸搫鐗冮崑鎾绘煛閸屾粌顣奸柡瀣暟缁晠鏁撻敓锟�
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询