wlmissyou
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 61 個
工控威望: 164 點
下載積分: 1261 分
在線時間: 95(小時)
注冊時間: 2017-06-11
最后登錄: 2024-11-05
查看wlmissyou的 主題 / 回貼
樓主  發(fā)表于: 2021-11-17 20:41
【S7-200 Smart開源標準化編程】之基礎----突破子程序的限制,讓子程序像FB一樣工作

就算看帖的小伙伴不考慮什么標準化編程,能突破子程序的一些限制也是好的。

先說說標準化程序的要求:對象化編程,程序中不使用M,T,C,子程序內(nèi)邏輯程序不可出現(xiàn)全局變量,更多的規(guī)則以后再說,先解決最基本問題。

我們首先看看200子程序有哪些限制:

1、最多128個子程序

這個限制是說你可以有128個子程序,不是調(diào)用限制,所以調(diào)用多少次都可以,受PLC資源限制。這個限制沒法破。

2、子程序只能有16個腳

為什么會有這個限制呢?臨時變量一共64個字節(jié),如果腳上都是最大的雙字數(shù)據(jù)類型,64除以4等于16,所以就有了這個16腳限制。注意最后四個字節(jié)的臨時變量系統(tǒng)保留。咱也不知道干啥用了。那么這個限制如何破解呢,比如說把bool數(shù)據(jù)類型的變量整合成byte字節(jié)型的變量給子程序,比如連接的多個連續(xù)V區(qū)參數(shù)以指針的方式傳給子程序。

3、最多嵌套8層

這個沒啥說的,沒法破,但一般情況下夠用了。

[    post]4、帶有計數(shù)器和定時器的子程序無法多次調(diào)用

高速計數(shù)器未試驗過,先排除。普通的計數(shù)器其實就是整數(shù)加,整數(shù)減,破解無壓力。定時器,我們用時間間隔定時器BGN_ITIME和CAL_ITIME指令實現(xiàn)毫秒級計時,多次調(diào)用無問題,破解無壓力。

5、子程序內(nèi)不能使用沿指令

雖然不能使用沿使令,但是通過梯形圖邏輯可以產(chǎn)生沿信號,使用不受限

6、置位,復位指令使用受限

這個破解沒問題。



更多的限制網(wǎng)友提一提,我們看看能不能破解。



200子程序多次調(diào)用總是出問題是因為什么的呢,200的子程序運行起來就是沒有靜態(tài)區(qū)的FC,問題就出在temp區(qū),因為temp不會保存啊,所以我們就要劃出V區(qū)來保存temp的數(shù)據(jù),像建立FB背影數(shù)據(jù)塊那樣。這部分背景數(shù)區(qū)上電時清零,子程序內(nèi)需要斷電保持的數(shù)據(jù)要記得用INOUT腳引出。工作起來也簡單,進入子程序后先將V區(qū)數(shù)據(jù)復制到temp,子程序邏輯運行完,把temp里的數(shù)據(jù)復制回V區(qū)。有伙伴會說,這不是就是帶庫的子程序嘛,應該是不同的。采用標準化方式的子程序必須全部無條件調(diào)用,就是每次掃描都得運行。



這里給出簡單的例程:

例程中有嵌套,有標準化定時器、標準化計數(shù)器,子程序多次調(diào)用,沿信號的生成和使用

加我微信進群交流:50586625


smart200標準化實踐modbus20220522.smart.zip (102 K) 下载次数:1183   
[ 此帖被wlmissyou在2022-09-15 09:08重新編輯 ]
本帖最近評分記錄:
  • 下載積分:+1(y282574647) 厲害,不過看不懂
  • 下載積分:+1(hsiung) QR碼過期了
  • 下載積分:+1(完美世界)
    zyt888
    級別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 59 個
    工控威望: 356 點
    下載積分: 2479 分
    在線時間: 27(小時)
    注冊時間: 2022-09-07
    最后登錄: 2023-10-19
    查看zyt888的 主題 / 回貼
    1樓  發(fā)表于: 2022-10-03 22:42
    前5個限制知道,這第6、置位,復位指令使用受限  是什么限制,我用著沒感覺哪里有問題啊,誰指點一下