一区二区三区成人-一区二区三区www-一区二区三区 日韩-一区二区日韩欧美-一区二区日韩精品中文字幕-一区二区日韩

萬泉河
WX:ZHO6371995,歡迎+
級別: 略有小成
精華主題: 0
發帖數量: 130 個
工控威望: 246 點
下載積分: 831 分
在線時間: 11(小時)
注冊時間: 2021-06-11
最后登錄: 2024-11-07
查看萬泉河的 主題 / 回貼
樓主  發表于: 2022-08-03 09:55
0803 【萬泉河】巧用程序塊臨時變量

上一篇文章《0728 【萬泉河】談虎色變雙線圈再談再變》有網友評論說, 文章題目應該叫做巧用臨時變量,我說, 我舉例的程序中用的都是全局變量,所以不能這么叫。 然而我可以以這個名字寫一篇文章, 真的是巧用臨時變量的。

先看芳季大俠寫過的系列文章:

入口在:
擁有屬于自己的指令第一集-技術視頻免費看-西門子工業1847會員–西門子中國 (siemens.com.cn)
具體內容,里面涉及的知識點如果有不懂的,可以去仔細研讀,甚至可以配合文章, 也自己實驗摸索得到。

然而,我是不會從這樣最基本的步驟一步步開講,我只能把實際用過的理論方法一步到位給一個終極的解決方案。 如果芳老師不再出第五集,把我本文的內容當做其第五集,我給來個狗尾續貂也可以。

芳老師在第四集有一張附圖:

本文的內容就從這張圖展開。

這張圖的意思是,在系統堆棧中,每一個同一級別的子程序TEMP變量同享的是同一片L空間。

這里先多講一點TEMP變量的本質是什么?其實仍然是計算機的內存RAM。原本作為RAM,是可以被全局訪問的, 只不過軟件系統做了保護限制, 不允許外部訪問。

多講這一點的意義在于, 對于一些連子程序功能都沒有, 或者有子程序, 然而子程序功能不如SMART這樣強大的PLC, 主要是西門子之外的一些其他品牌的小PLC, 它們的系統中沒有TEMP變量的時候,我們通過編程手段自己部署一部分內存數據區給當做TEMP變量使用。 這時候,操作系統本身自然不會限制, 那么我們在編程的時候就要格外小心, 要對這篇數據保護好。這是題外話。

回到上面的圖片,圖中我用紅色方框圈出來,CDEF四個子程序,它們是同一級別的。 那么除了說它們共享L變量空間之外,其實還有一個含義, 就是當程序執行完了子程序C,又進入子程序D的時候, 在子程序D開始時, TEMP區的內容,除了INPUT對應的部分被輸入管腳的值刷新了之外, 其余的所有數值其實就是離開子程序C時的內容。

即所有數據值,現場被完整保留。

這就是我們平常教育新手的時候, 總要強調, TEMP的數據,不要先讀, 不要先讀,不要讀操作在先。 應該先寫操作,賦值以后,后面的數值才是真實可控的,邏輯才可控。

有的人會不信, 說自己明明做子程序驗證過了,我就是先讀數值了, 也沒有問題。 那是因為你測試程序中同一級別的子程序數量太少, 可能只有它自己。比如圖中的F。 那么數據區就不會被別的子程序污染。 你做的邏輯暫時好用。然而等到了現場, 真實應用中, 子程序多了, 數據就混亂了,邏輯就亂套了。

所以, 我經常建議對TEMP變量屬性不熟悉的新手,調試中遇到疑惑的時候, 不防在子程序的開始時候, 把用到的一片TEMP變量全部清零。 后面程序功能都好用,才叫好用。

這是傳統做法。

今天則是顛覆傳統,利用前面說的進入下一個子程序后,前一個子程序的TEMP數據現場被完整保留集成的這個特性,我們可以用來做點文章。才是題目宣稱的巧用臨時變量。

我在3年前寫過一篇文章,做過程序編程方法征集:
《【萬泉河】有償征集2:S7-200函數塊BLOCK_MOVE》
https://www.ad.siemens.com.cn/club/bbs/PostStory.aspx?a_id=1574124&b_id=80&s_id=157&num=3#anch

需要把一整塊的數據用BLOKMOVE的方法傳送到一個完全封裝的子程序的內部。 然而并沒有如愿得到答案。 還是我自己在去年底的時候,對TEMP變量思考到上述的內容后,得到了解決。

即,數據傳送部分下降層級,放到相鄰調用的前一個子程序中,直接對TEMP數據BLOKMOVE, 后面的子程序中的TEMP就自然收到了數值。
空講理論光說不練可能有些難懂。 下面做個例子來演示下實現方法以及實際的應用。

通常SMART的子程序的管腳數量有限制,可能是16個,數值不精確,但是沒意義,總之系統給的再多,在做標準化庫函數時也會不夠用。所以總要有有擴張管腳的需求。

我們有建立一個子程序叫做“功能塊”:  


其原生管腳很少,然而我們把更多的管腳建立到LB10,LB11,LB12的L數據區中。
做一個“功能塊前處理”的子程序 ,在其中調用BLOCKMOVE功能:


即實現了對內部TEMP變量的批量賦值, VB10的數據可以作為功能塊的INPUT數據使用了。
當然,我們還可以做個“功能塊后處理”,數值的傳送方向顛倒一下:

那么建立的IN11-IN34的臨時變量事實上成為了功能塊的INOUT管腳。

程序的調用過程變為:


如此實現了給功能塊擴張了24個管腳。 如果還需要更多,則簡單修改即可。

我做的標準化煙臺方法的分享項目的SMART 200的程序, 在2022年春節左右,做了一次V2.0的升級, 其中包含了本文講解的技術方法,使得程序更加簡練,優雅, 封裝更徹底。

V2.0的升級程序不是完整的項目程序,而只是做了一部分功能的演示, 學員需要在加入學習營后,從QQ群文件中自行下載。學習掌握之后改進升級到所有程序功能。 在掌握之前,還是仍然可以只學習V1.0的方法,以及工程應用。其實只是我一個人的心結, 追求更優雅更完美的程序架構,實際功能是一樣的。
0803 【萬泉河】巧用程序塊臨時變量 (1).pdf (298 K) 下载次数:93
ldf710613
級別: 論壇先鋒
精華主題: 0
發帖數量: 367 個
工控威望: 1154 點
下載積分: 1301 分
在線時間: 31(小時)
注冊時間: 2022-04-09
最后登錄: 2023-12-18
查看ldf710613的 主題 / 回貼
1樓  發表于: 2022-08-05 16:48
學習一下

主站蜘蛛池模板: av91在线| 久久久精品免费视频 | 久久精品一区二区免费看| 男人女人日皮| 喘息揉弄1v1h老师| 亚洲第一色网| 国产精品51麻豆cm传媒| 嫩草影院久久99| 精品一区二区三区在线成人| 国产乱子伦一区二区三区| 新影音先锋男人色资源网| 厨房play黄瓜进入| 欧美在线一级片| 50度灰破解版v5.7.0| 6969精品视频在线观看| 青青青国产视频| 国产大神91一区二区三区| 日本嫩小xxxxhd| 国产一区二区不卡视频| freese×video性欧美丝袜| 美女光屁股网站| 护士让我吃奶我扒她奶| 国产精品www| 亚洲第一页综合| 久久精品观看| 秋霞鲁丝影院久久人人综合| 欧美日韩精品乱国产| 国产最新进精品视频| 亚洲精品国产自在现线最新 | 掰开逼操| juliaann厨房大战| 我半夜摸妺妺的奶C了她软件| 国产免费久久精品| 97在线资源站| 欧美激烈精交gif动态图18p| 好爽好舒服视频| 521色香蕉网在线观看免费| 亚洲国产精品日韩高清秒播| 亚洲色图150p| 日本hd18| 国内精品一区视频在线播放|