色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

全局變量與全局訪問之間的差異

opkgjew ? 來源:PLC標準化編程 ? 作者:萬泉河0031 ? 2022-11-14 11:21 ? 次閱讀

簡單說,全局變量、局部變量是變量自身的身份。身份的不同是靠出生地決定的。而能否被全能局訪問,能被多大范圍空間訪問,即首篇文章中講到的作用域,是完全不同的概念。不能混而等同之。

然而,如果大家對寫程序并沒有什么原則目標, 只以完成設計任務為目的,以設備最終能跑起來為目的,這些概念不清楚也無所謂。尤其只在西門子平臺內談,沒有橫向的對比,就得不出更深刻的經驗。

所以,這個話題就放下了。估計當年的讀者們也都放下了,沒幾個人放在心上。

我自己最近在編寫《三菱PLC標準化煙臺方法》的書,在寫書的過程中,在做一些小例子來驗證功能。其中把西門子的程序移植到了GX WORKS2,寫完了GX2的章節。然后現在又把程序移植到GX WORKS3,為GX3的章節整理素材。就發現了問題。

簡單描述,就是原本在西門子程序中,有外部對FB塊內的靜態變量訪問,到GX2,也仍然這么做的。但移植到GX3時,發現了問題,編譯報錯。

經咨詢三菱標準化的學員,得到提醒, 說新的GX3平臺,靜態變量VAR多出來一個VAR_PUBLIC的類型,可以支持外部訪問。照著修改之后,果然沒問題了。

(很多人以為我做啥品牌的標準化方法,就一定要在掌握這個品牌全部的高精端的知識基礎上,其實恰恰相反, 我只是對標準化架構熟悉,而對這些具體品牌和軟件的使用,我反而時刻在跟學員們學習請教。)

我現在回過頭看我當年提出的問題,就很清楚了。靜態變量能被全局訪問,被很多人誤以為就是等同于全局變量,那是因為只在西門子的井底。當視界擴大到所有PLC品牌和平臺之后,就不一樣了。甚至GX2和GX3都不一樣。

GX2中VAR可以被全局訪問,而GX3中則不可以。

你總不能認為GX2中的VAR是全局變量,而GX3中的 VAR就不是全局變量了吧?

發現這個問題的起源的程序塊來自西門子官方庫BST,先后移植到GX2和GX3。而根源又是其設計的部分靜態變量要被WINCC訪問,即勾選了HMI/OPC可見的選項。

在PORTAL中,不管是否勾選,影響的只是WINCC訪問的權限,而在程序中FB外的訪問都是暢通無阻的。

我在上帝一篇中建議過加個開關,關掉被塊外部訪問的權限,現在看,GX3果然做到了。

而最近幾天,也有學員在開發自己的庫函數,跟我溝通相似的問題。問我與WINCC通訊相關的變量放在OUTPUT還是STATIC更合適的問題。

我給與的回答是,原則上來講,應該放到INOUT或者OUTPUT。而放到VAR STATIC是不合適的,不符合封裝的原則。比如我這次的移植,就出現了問題。

不能因為看到有西門子官方的例子程序這么做過,就理所當然的認為就是正確無誤的。他們的作者也是普通的工控工程師,也未必事事都嚴格規范。

而我很容易就從西門子官方出的《設計規范指南》中找到了理論依據。

其中的DA005規則:只通過形參交換數據

DA006規則:僅從塊內訪問靜態變量

5eb973dc-6273-11ed-8abf-dac502259ad0.png

有人會杠, 如果不讓從塊外訪問靜態變量, 那系統為啥要設計為可以訪問?

就如同我一直在推廣PLC中編程不要使用M全局變量的理論,有人杠我系統設計了就該允許使用一個邏輯。

答案是系統提供的功能是給非規范的程序準備的。未必所有程序,比如測試學習程序也需要完全遵守規范。

而倒過來說,如果系統提供的功能即符合規范規則,只要規范規則之外的用法系統即不允許。如我在GX3遇到的這樣。那么,連編程規范都不需要存在。西門子也不需要整理一個設計規范了。

你做的不對, 編譯都不通過,保存都亮紅燈的事,還需要寫在規范里面嗎?

規范里的所有違反規范的相反的做法,都是可以用的,無非是不規范而已。

所以,我們在GX3遇到的問題, 那些導致編譯錯誤的變量, 正確規范的數據類型應該是INOUT和OUTPUT。

有一些剛入門的工程師, 甚至連FB都不會用,從未用過的工程師,會看不懂我的這些文章,會質疑這些文章傳播的知識什么用,我不懂你這些道理,我甚至不需要用FB,不也照樣做出功能正常運行的設備嗎?

我借用某Z常說的一句話:“基礎不牢,地動山搖”。其實我不完全認同這個道理的。基礎不牢,不會導致你地動山搖,你在入門級別的工作并不受影響。而恰恰反過來,如果基礎牢了, 會有更高的起飛的空間。

就好比,田徑運動員基礎的動作姿勢如果不標準,在校級運動會可能沒什么大的影響,照樣有可能獲得校運會冠軍。然而當到了更大的天地間,就會發現姿勢標準的重要性了。而等到了奧運會選手的級別,所有的運動員動作一定都是最標準的了。因為那是基礎的基本功。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HMI
    HMI
    +關注

    關注

    9

    文章

    587

    瀏覽量

    48539
  • VaR
    VaR
    +關注

    關注

    0

    文章

    39

    瀏覽量

    11336
  • 靜態變量
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6645

原文標題:1112 【萬泉河】FB內靜態變量的使用

文章出處:【微信號:PLC標準化編程,微信公眾號:PLC標準化編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LABVIEW調用DLL,DLL中包含全局變量不識別的問題

    頭文件中寫法如上,.cpp文件中寫法如下 導入DLL時,錯誤如下 這個報錯就很沒有道理 我在同樣的文件中按同樣的寫法,寫一個add(a,b,c)函數,同樣寫全局變量的話,它就不會報這樣的錯,所以我可以排除是頭文件或者預處理定義的問題。 很頭疼,有沒有大神指導一下。
    發表于 05-31 09:37

    建立更多的全局變量的時候,如何使得PROGRAM SIZE不增大呢?

    今天發現,建立更多的全局變量的時候,PROGRAM SIZE同時也增大了,如何使得PROGRAM SIZE不增大呢?我對全局變量的初始化無要求。
    發表于 05-15 06:30

    COSMIC在外部中斷中修改全局變量后,發現在主程序中,修改的值又變回來了,為什么?

    我用的COSMIC,在外部中斷中修改全局變量后,發現在主程序中,修改的值又變回來了(比如說我想計數外部中斷的次數)。這是怎么回事?而我在定時中斷中卻可以修改全局變量
    發表于 05-13 08:45

    使用IAR定義全局變量出現兩個同名不同地址變量是什么原因導致的?

    使用IAR定義全局變量出現兩個同名不同地址變量 systickCount和systickFlag都在另一個c文件里定義的,假設a.c,然后在a.h里聲明為外部變量,main.c
    發表于 05-10 06:09

    請問ucos中全局變量OSTime最終能累加到多少呢?

    在ucos-ii 中全局變量 OSTime 總是++請問最終能累加到多少呢? 若加到65530后 會自動歸零嗎?
    發表于 05-09 06:22

    請問stm32程序中如何優化大量的編譯開關和全局變量

    剛接手一個程序,發現里面存在大量的編譯開關和定義了大量的全局變量,感覺這些顯得很是臃腫,有什么方法可以優化一下這些編譯開關和全局變量全局變量是一個個的標志位,有時候還會有條件嵌套。
    發表于 05-06 06:35

    你是不是也沒躲過這個坑?用了太多全局變量......

    全局變量太多有哪些弊端?該如何規避,以及如何管理全局變量等。一、全局變量太多有哪些弊端?真正做過項目的同學應該都能明白,項目中全局變量太多,會存在很多問題。這里給大家羅列一些太多
    的頭像 發表于 05-01 08:10 ?525次閱讀
    你是不是也沒躲過這個坑?用了太多<b class='flag-5'>全局變量</b>......

    STM8L使用中全局變量自動更改是怎么回事?

    問題是這樣的,我在使用STM8L的時候,定義了一個全局變量A,只在初始化的時候賦了一個初值A=5,在整個程序生命過程中,沒有任何一個地方改變這個初值。目前遇到在程序運行中,讀出的這個A的值為0,請問是否可以確定為內存溢出或者其他什么問題 有遇到類似情況的嗎,求指導
    發表于 04-28 06:03

    全局變量太多有哪些弊端?

    隨著全局變量的增多,不同模塊的變量名可能會產生沖突或混淆,導致代碼難以理解和維護。同時,全局變量使得代碼中的依賴關系變得復雜,難以追蹤和理解。這增加了新開發人員的學習成本,也增加了修改和調試的難度。
    發表于 04-24 09:15 ?873次閱讀

    請問ModusToolbox下針對CYW20719B2編程,能否指定全局變量地址?

    請問ModusToolbox 下針對CYW20719B2編程,能否指定全局變量地址? 謝謝
    發表于 03-01 11:13

    請問core2里的程序可以直接使用core1里的全局變量嗎?

    如題,core2里的程序可以直接使用core1里的全局變量嗎?就是不同核之前可以直接通信嗎?是否還需要配置一些東西才能實現核間通信?
    發表于 02-20 08:05

    Tc38x中全局變量訪問只能是不帶cache的地址嗎?

    全局變量只能放置在不帶cache的地址么?
    發表于 02-06 08:17

    使用Tasking編譯器生成的map文件中找不到靜態全局變量的地址怎么解決 ?

    使用Tasking編譯器生成的map文件中找不到靜態全局變量的地址(變量在函數中已經使用),請問怎么解決
    發表于 02-06 07:21

    modustoolbox在正常編譯中通過工程下增強了全局變量數組的長度后報錯了怎么解決?

    客戶使用modustoolboxdevelpcy8c6245azi-s3D72,在正常編譯中通過工程下增強了全局變量數組的長度,結果編譯報導不錯,初始化是內存超越了。通過對比發現.bss的大小最小是25292,如附件描述,請幫忙確認識別本原因并提供解決方案,謝謝謝謝!
    發表于 01-25 06:58

    TC275在內存分段預警處理之后,設置的全局變量初始值不正確怎么解決?

    大家好想問一下,tc275里,自己在地圖文件里定義有了新的存檔段,又設置了首地位置,段內對象可寫,4字節對齊。但是在內存分段預警處理之后,設置的全局變量初始值不正確,板子上電后會給出一個隨機值,而不會是自己設定的初始值,這怎么解決了呢,具體附圖 ?
    發表于 01-22 06:40
    主站蜘蛛池模板: 免费在线亚洲视频| 免费人成网站永久| 免费撕开胸罩吮胸视频| 丝袜美女被艹| 91天仙tv嫩模福利| 国产精品自产拍在线观看中文| 久久热在线视频精品店| 无码乱人伦一区二区亚洲一| 10分钟免费观看视频| 国产一卡2卡3卡4卡孕妇网站 | 日美一级毛片| 18禁在线无遮挡羞羞漫画| 国产乱码卡二卡三卡4W| 欧美亚洲日本日韩在线| 伊人久久大香线蕉综合亚洲| 国产成人啪精品视频免费网| 女人被弄到高潮叫床免 | 无码内射成人免费喷射| GAY2022空少被体育生暴菊| 久久爽狠狠添AV激情五月| 亚洲欧美综合乱码精品成人网| 囯产精品久久久久免费蜜桃 | 亚洲精品久久午夜麻豆| 成人在免费观看视频国产| 男人桶爽女人| 91麻豆精品国产一级| 久久综合网久久综合| 中文视频在线观看| 两个人看的www免费高清直播| 亚洲综合中文字幕无线码| 黄色免费在线网址| 亚洲精品电影久久久影院| 国产精品久久久久久搜索 | 琉璃美人煞在线观看| 久久精品一本到99热| 成人在线观看国产| 欧洲兽交另类AVXXX| YIN荡的老师系列第6部分视频| 嗯啊好爽视频| 古风一女N男到处做高H| 甜性涩爱在线播放|