18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 18luck平台 >> plc工業軟件使用 >> 正文

西門子S7-200子程序,多次調用的“怪”現象

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2023/8/5

西門子S7-200子程序,多次調用的“怪”現象

在S7-200編程中,子程序想必大家都用過,使用子程序可以更好地組織程序結構,便於閱讀和調試,也可以縮短程序代碼。但是使用子程序也有一些需要注意的地方,除了子程序在同一周期內被多次調用時,不能使用上升沿、下降沿、定時器和計數器之外,還有子程序中局部變量的特點,在編程多次調用帶參數子程序時要特別注意。下麵就是前些天熱線上遇到的一個Case,非常有代表性,在這裏跟大家分享。

E:您好,西門子技術支持。
C:您好,我想問下,200子程序是不是多次調用時會(hui) 不好使?
E:不會(hui) 啊,您是不是在子程序裏使用了沿指令或者定時器?
C:沒有啊,我就編了一句很簡單的開關(guan) 程序,開關(guan) 閉合,線圈導通,然後主程序裏調用了兩(liang) 次這個(ge) 子程序,結果第一個(ge) I點閉合了,兩(liang) 個(ge) Q點都導通了。
E:(心裏活動:看來是和子程序的局部變量有關(guan) 了,估計客戶程序邏輯有問題)那請您描述一下您的子程序吧,我幫您看看。
於(yu) 是客戶描述了一下自己的程序,大致了解了之後告知客戶我這邊測試下,稍後回複。
客戶的程序是這樣的:
子程序:是個(ge) 常見的自保持邏輯,接口參數如紅框所示。

 

圖. 01

主程序:調用了兩(liang) 次上麵的子程序,實現I0.0和I0.1控製Q0.0的閉合和斷開,I0.2和I0.3控製Q0.1的閉合和斷開。

 

圖. 02

那麽(me) 在線測試下程序執行情況,發現果然如客戶所描述的,I0.0為(wei) 1後,Q0.0和Q0.1都為(wei) 1了。見下圖.03所示。而如果閉合I0.2,則Q0.0和Q0.1都斷開。
 

圖. 03

為(wei) 什麽(me) 會(hui) 這樣呢?首先我們(men) 先明確子程序局部變量的特點。局部變量的變量類型分為(wei) 四種:IN,IN_OUT,OUT和TEMP,局部變量存儲(chu) 區是在子程序調用時開辟的,子程序調用完成,局部變量占用的存儲(chu) 空間釋放。
我們(men) 來分析下客戶的子程序。
在主程序第一次調用子程序時,如果I0.0為(wei) 1,I0.1為(wei) 0,它們(men) 將自身值分別傳(chuan) 給輸入局部變量#AA和#BB,子程序中程序邏輯執行如下圖.04所示。此時局部變量#CC值為(wei) 1,子程序完成,#CC將值傳(chuan) 送到輸出參數Q0.0上,使其置1。根據局部變量的特點,子程序第一次調用完成後,局部變量存儲(chu) 區釋放。

 
圖. 04
那麽(me) 當主程序第二次調用該子程序時,開辟臨(lin) 時存儲(chu) 空間,但是此時的存儲(chu) 空間與(yu) 第一次調用時開辟的不一定一致。可是,也有可能由於(yu) 程序簡單,仍然使用第一次調用時占用的存儲(chu) 空間。如果這種情況發生了,那麽(me) 第一次調用時已經將#CC的L0.2置了1,而此值依舊存在,那麽(me) 第二次調用時雖然輸入參數I0.2和I0.3為(wei) 0 ,但是#CC(L0.2)為(wei) 1,由於(yu) 客戶的子程序邏輯有自保持部分,所以最後L0.2的邏輯結果仍然是1。子程序完成後,#CC將值傳(chuan) 送到輸出參數Q0.1上,使其置1。所以就會(hui) 出現客戶反映的那種問題。
那麽(me) 該如何避免這種情況呢?
大家是否還記得剛剛介紹局部變量參數類型時除了IN, OUT類型外,還有一種類型叫IN_OUT,這種類型的參數是先讀入,然後再寫(xie) 出,這裏我們(men) 就可以利用它的特點解決(jue) 上麵的問題。
下麵對子程序的參數進行修改,將原先的#CC變量類型改為(wei) IN_OUT。如下圖所示:

 
圖. 05

主程序結構不變,如下所示,可以看到由於(yu) #CC的類型是IN-OUT,它在子程序塊的接口位置也轉到了左側(ce) 輸入側(ce) 。

 

圖. 06
下麵再次將I0.0置1,其他輸入都為(wei) 0,監控程序狀態,如圖.07所示,可以看到隻有Q0.0為(wei) 1,Q0.1狀態為(wei) 0。而如果將I0.1置1, Q0.0被複位,Q0.1還是0,這樣就符合客戶的控製要求了。

 

圖. 07

同樣,如果隻給I0.2置1,那麽(me) 也隻有Q0.1會(hui) 亮,不會(hui) 再影響Q0.0。
了解了IN_OUT類型變量的特點,就不難分析以上的結果。因為(wei) 每次調用子程序時,局部變量#CC都會(hui) 先去讀取輸入參數Q0.0或Q0.1的狀態,所以即使兩(liang) 次調用子程序時,#CC變量使用的同一區域,該區域的值也會(hui) 在開始被Q點的狀態所修改,就不存在兩(liang) 次調用相互影響的情況了。
另外,如果在子程序一開始就添加一條指令,對局部變量#CC進行賦初值(如圖.08),也可以避免臨(lin) 時變量區數值不定的問題,您可以嚐試測試下

 
圖. 08
所以,在編寫(xie) 200子程序時要特別注意局部變量的特點,一旦出現多次調用不正常的情況,就可以從(cong) 局部變量的特點出發分析,看看是不是存在隱患。善加利用IN_OUT變量也許可以解決(jue) 許多問題。
 


 

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 個字
[ 查看全部 ] 網友評論
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢