女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

    文章

    629

    瀏覽量

    49643
  • VaR
    VaR
    +關注

    關注

    0

    文章

    39

    瀏覽量

    11517
  • 靜態變量
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6762

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    全局快門圖像傳感器技術的改進提升了機器視覺效率

    先進視覺系統應運而生,而高速、全畫幅全局快門傳感器是這些系統的核心。全局快門能夠即時捕捉拍攝對象的完整視圖,這非常重要。 ? 基于全局快門的系統可以消除許多常見于視覺系統的視覺偽影(例如擺動、傾斜和空間混疊等),有助于
    發表于 05-20 16:18 ?1465次閱讀
    <b class='flag-5'>全局</b>快門圖像傳感器技術的改進提升了機器視覺效率

    VirtualLab Fusion應用:參數耦合

    。 源代碼標簽包含以下三部分: 源代碼(中心區域) 全局變量/參數(右側上端) 選擇系統參數(右側底端) 6.參數耦合的一般示例 ?通常,利用代碼字典讀取所選參數并將其保存到變量(第4行)。 ?之后
    發表于 03-17 11:11

    求助,關于STM32G070封裝HAL_GetTick的疑問求解

    HAL_GetTick函數,默認使用了滴答定時器中斷,并使用了全局變量uwTick,這個變量是32位的,那變量溢出了就會從0開始,許多外設超時判斷的語句是HAL_GetTick() - Tickstart>TimeOut,
    發表于 03-14 07:20

    DMD全局復位是否一定要求加載所有行的數據?

    1.DMD全局復位是否一定要求加載所有行的數據?可否指定某一段的行數據進行變化,然后申請全局復位,沒有數據變化的行保持原先數據。 2.指定某一段的行數據變化,DVALID信號應該如何控制。控制
    發表于 02-26 08:04

    FRED案例:天文光干涉儀

    和M2)之間的距離d的函數。在實際中,改變反射鏡間距可以獲得預期的未知值:光源的角度范圍。為了觀察干涉圖樣上這些變量每個的影響,使用FRED內置的BASIC腳本環境,可以寫入帶有全局變量的嵌入式腳本。這些
    發表于 01-21 09:58

    天文光干涉儀

    的小孔半徑為1mm,反射鏡距離為50mm。右:增加反射鏡間距到100mm的干涉圖樣,此干涉圖的能見度降低了。全局變量的腳本 條紋可見度是光源角度范圍、光譜含量、小孔半徑和兩個外反射鏡(M1和M2)之間
    發表于 12-25 15:26

    onsemi全局快門圖像傳感器—了解圖像傳感器的選型要點

    統應運而生,而高速、全畫幅全局快門傳感器是這些系統的核心。全局快門能夠即時捕捉拍攝對象的完整視圖,這非常重要。基于全局快門的系統可以消除許多常見于視覺系統的視覺偽
    的頭像 發表于 12-20 16:15 ?697次閱讀
    onsemi<b class='flag-5'>全局</b>快門圖像傳感器—了解圖像傳感器的選型要點

    為什么同一個隊列引用的全局變量,運行在兩個子vi中發現隊列數據丟失了

    我創建了一個隊列,然后將隊列引用做了個全局變量,運行在兩個子vi中,一個是只入隊列,另一個是只出隊列。但我發現,一個字vi數據入隊列成功,檢查隊列元素數量也已經是1了,這時我運行另一個子vi,出隊列前檢查隊列數量發現為0了。隊列里的數據沒了。而且這個情況不是一直有,是偶爾發生。
    發表于 11-14 11:47

    labview主程序運行時如何引起子VI里的事件結構響應

    設計了一個程序需要通過主VI的按鍵控制子VI事件發生,設置了個全局變量作為媒介,但是值會變事件并不會發生
    發表于 11-10 13:04

    鴻蒙原生應用元服務開發-倉頡基本概念程序結構

    定義一系列的變量、函數和自定義類型(如 struct、class、enum 和 interface 等),其中的變量和函數分別被稱為全局變量全局函數。如果要將倉頡程序編譯為可執行文件
    發表于 08-13 10:57

    使用EMEM內存的幾個疑問求解?

    連接到 XBAR1),數據寫入和讀取將比其他存儲器花費更多時間。 那么,是否建議存儲普通全局變量/全局靜態變量? 3.EMEM 在多核應用中的優缺點?
    發表于 07-04 07:02

    怎么定義全局數組到esp32s2外掛的psram中?

    怎么定義全局數組到esp32s2外掛的psram中
    發表于 06-21 07:39

    通過設置全局變量I2S0,I2S1觸發DMA機制的疑問求解答

    在跟蹤esp32-web-camera的代碼時,看到了通過設置全局變量I2S0,I2S1,觸發DMA的機制,對于結構體i2s_dev_t的各字段不是很理解,不懂哪里有這方面的文檔,另外通過設置變量
    發表于 06-13 07:42

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

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

    TC375如何將變量值保存到非易失性存儲器中?

    我有一臺 TC375,正在開發工作室進行編程。 我的軟件有一個控制系統,它使用一組我可以調整的參數。 這些參數設置為全局變量。 一旦我對它們進行了調整,控制器復位后就無法保持它們的值。 是否有辦法使用閃存編程示例,用新值更新 Pflash 或 Dflash 中的地址,使其存儲在非易失性存儲器中?
    發表于 05-31 06:40