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

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

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

3天內不再提示

PLC靜態變量的作用域和生存期

opkgjew ? 來源:劍指工控 ? 作者:萬泉河 ? 2022-11-14 11:23 ? 次閱讀

PLC的本質是個計算機。 和計算機的編程語言一樣,在程序中是需要用到各種變量的。

所以先從計算機高級語言說起。

不管是VB還是C++,各種編程語言都有一個比較重要的章節,講變量的存儲類型。

我一開始以為它們是在第一章第一課就講的。 還好先翻了翻書。

第七章

7.8 局部變量和全局變量

7.9 動態存儲變量和靜態存儲變量

在實際的高級語言的編程應用中,用的最多的是局部變量和全部變量, 以及極少數情況下會用到局部的靜態變量。 有多極少數呢?我甚至想不起來應用靜態變量的標準場景了。

幸虧翻了下書, 書里有例子講到了,如此珍貴, 我抄下來算了:

C語言用static處理輸出1到5的階乘.

#include
int main()
{
int i;
for(i=1;i<=5;++i)
printf("%d!=%d\n",i,fact(i));
return 0;
}
int fact(int n)
{
static int f = 1;
f=f*n;
return (f);
}

這里面的static int f 就是靜態變量

其中一個最大的技巧是, 在函數計算5!的時候, 用到了前面計算4!的計算結果。對早期的計算機計算資源特別寶貴的情況下, 起到了節省一點點計算資源的作用。

但是, 這個技巧又相當扯淡。如果你只想求5!而對前面的1!,2!,3!,4!皆不感興趣,則這個函數反而不能用了。 還逼著你非要在外面做一次循環,重復調用那個函數fact,才能真正得到5!的答案。

一個計算功能, 原生的函數還不能直接得到答案, 還需要再做一次循環處理,才可以。 這事兒換誰誰不煩啊?

嗯, 還真有不煩的。 誰不煩?

PLC不煩。

因為PLC的OB1是天生自動循環的。

只要計算結果不是需要在一個周期內立馬得到答案, 就可以充分使用OB1循環運行的特性, 在函數中實現想要的功能。

比如MODBUS輪詢,就可以由OB1的循環調用機制本身來驅動。 不需要自己做循環程序(而且也不能做, 如果做的話CPU單個周期運轉時間過長, 會累死。)

所以, 以往在高級語言中,只有概念, 而鮮有用武之地的STATIC靜態變量在PLC系統中,閃亮登場了, 而且大放異彩。

變量作用域和生存期列表:

pYYBAGNxtO2Af_1VAADBvVMbi6o468.jpg

備注

* 對于被嵌套調用的函數塊FB/FC/OB來說, 各自定義的TEMP變量不繼承,不滲透。

** 地址區間先分給INPUT和OUTPUT,而后才是STATIC。

*** 所有TEMP變量, 必須先寫入數值后使用。 不能假設初始都為0,或者上個周期運行的結果。

所以,不同的應用需求, 需要的變量類型是不一樣的。

比如要計算OUT=(A+B)/(C+D),

在LAD或者STL 里,通常要用1個或者2個臨時變量。

L #A

L #B

+R

T LD10

L #C

L #D

+R

T LD14

L LD10

L LD14

/R

T #OUT

這里使用的L區,雙字,存儲REAL數據。 在STEP7中可以未加定義直接使用。 而在TIA PORTAL中要么提前定義, 要么直接使用名字后補充定義到LOCAL變量。不再允許絕對尋址。

如果同一個函數中, 還有要使用同樣數據類型的地方,可以重復使用。 但都是要先寫入后讀取。

同樣的程序, 使用其它的內存地址來實現當然也可以。 比如可以使用MD10/MD14替代上面的LD10/LD14。 運算效果完全相同。 但是,對資源使用造成了浪費, 也容易導致變量重復使用, 會干擾其他的使用了同地址的函數塊。

如果見到有人做的這樣的程序,你立馬可以判定: 這是個新手做的。

MODBUS輪詢問題,用SCL語言的部分代碼(用LAD和STL原理相同)

IF "FirstScan" THEN
#cycle := 0;
#step := 1;
#j := -1;
END_IF;

IF #Data.MB_ADDR = 0 THEN

#i := #i + 1;
RETURN;
END_IF;

其中的#cycle ,#step,#i,#j等變量,都是定義的STATIC靜態變量。具體細分的話, 個別變量可能可以使用TEMP臨時變量, 但圖省事, 也就不那么細了。 反正最終完全封裝, 不會影響到外面其它函數的變量使用。

同樣的道理,這些變量如果使用全局變量M, 能不能同樣實現目的呢?

答案是:有時候能,有時候不能!

看這個函數使用的情況。 如果在系統中只調用1次, 那是可以的。 而如果需要調用n次, 使用全局變量的話, 反而不可以了!多個實例時間會亂串, 會互相干擾。所以如果不幸要多次調用, 還需要復制另存,更改其中的M變量,換一批來!

上面的功能中還使用了定時器, 只不過代碼沒有貼出來。 也是同樣的道理。 只不過定時器比較復雜, 使用的是多重背景的數據塊,本質也是STATIC變量。

emmmm, 我這是在做什么?

我是在重復印證我所主張的“好的程序的標準是:不使用M中間量,不使用Timer。”






審核編輯:劉清

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

    關注

    19

    文章

    7520

    瀏覽量

    88233
  • SCL
    SCL
    +關注

    關注

    1

    文章

    239

    瀏覽量

    17111
  • 靜態變量
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6672
  • plc編程語言
    +關注

    關注

    0

    文章

    7

    瀏覽量

    1178

原文標題:【萬泉河】PLC系統變量的作用域和生存期

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

收藏 人收藏

    評論

    相關推薦

    [8.7.1]--5.7全局變量作用生存期

    程序設計
    jf_75936199
    發布于 :2023年03月06日 20:01:12

    靜態變量、全局變量和局部變量

    作用范圍內可見。這一點是它與全局變量的區別。從以上分析可以看出,把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局
    發表于 06-20 09:52

    靜態變量的文件范圍

    嗨!我遇到了一個問題。我想引用(我不知道確切的術語是什么)或者使用pwm.c單元編譯中的main.c單元編譯中的靜態變量。但是,XC8用戶指南說:如果另一個源文件中定義的變量不是靜態的(參見
    發表于 03-12 09:54

    一看就知!static在編程中的作用到底是什么?

    能在這個函數里用了,同一個文件中其他函數是用不了的,同其他局部變量作用一樣的。生存期:由于被static修飾的變量總是存在內存的
    發表于 06-20 13:19

    RAM的局部靜態變量和全局變量消耗

    因為在連接時,全局變量和局部靜態變量都是在data區,所以在這里給放一起討論了。在原文中自己的表述犯了一個錯誤,就是初始化的全局變量或者局部靜態變量,是占用生成的可執行文件大小。而未初
    發表于 11-03 08:54

    嵌入式C中的靜態變量是什么

    靜態變量與動態變量基本概念靜態變量:指的是在編譯時(compiling-time)變量的地址和大小都已經確定下來的變量
    發表于 12-15 07:08

    ARM之靜態變量簡析

    類型。在某個函數中聲明的為內部靜態變量。內部靜態變量作用范圍僅限于定義它的函數中。因此,內部static變量類似于auto變量,只不過au
    發表于 04-24 09:27

    什么是軟件生存期過程

    什么是軟件生存期過程 1 主題內容與適用范圍   1.1 主題內容   本標準規定
    發表于 04-14 10:20 ?861次閱讀

    軟件生存期過程(2)

    軟件生存期過程(2)  9 操作過程   操作過程含有操作者的活動和任務。  此過程包括系統操作和
    發表于 04-14 11:00 ?337次閱讀

    軟件生存期過程(1)

    軟件生存期過程(1)  6 獲取過程   獲取過程包含需方的活動和任務。此過程從定義軟件產品或服務的獲取需求開始。接
    發表于 04-14 11:10 ?1107次閱讀

    關于Java變量作用分析

    目錄 1.靜態作用與動態作用 2.變量作用
    發表于 09-25 16:28 ?0次下載

    單片機的靜態變量詳細資料講解

    靜態變量作用范圍在一個文件內,程序開始時分配空間,結束時釋放空間,默認初始化為0,使用時可以改變其值。
    發表于 05-30 17:55 ?0次下載
    單片機的<b class='flag-5'>靜態變量</b>詳細資料講解

    python變量作用

    python變量作用 1. 作用 Python的作用
    的頭像 發表于 03-03 16:50 ?1633次閱讀

    C語言里函數的定義、子函數的使用及變量作用

    這篇介紹C語言里函數的定義、子函數的使用。接著介紹變量作用,定義全局變量靜態變量、只讀變量
    的頭像 發表于 04-28 11:23 ?6961次閱讀

    static關鍵字的三種用法

    (StaticVariables):在C語言中,使用`static`關鍵字來聲明靜態變量是一種常見的用法,它具有以下主要作用:1.生存期延長:靜態變量
    的頭像 發表于 11-10 08:00 ?536次閱讀
    static關鍵字的三種用法
    主站蜘蛛池模板: 久久99re2热在线播放7| 国产亚洲欧美在线观看三区| 小处雏一区二区三区| 青娱乐极品视觉盛宴国产视频| 久久精品热老司机| 国产在线精品亚洲| 国产亚洲精品久久久久久禁果TV| 丰满的美女射精动态图| jizz中国女人| WWW国产精品内射熟女| 99er久久国产精品在线| 综合色就爱涩涩涩综合婷婷 | 99精品国产在热久久| 2020亚洲色噜噜狠狠网站| 18黄女脱内衣| 98久久无码一区人妻A片蜜| 最新色导航| 97视频免费观看| 99视频精品在线| RUNAWAY韩国动漫免费官网版| fryee性欧美18 19| z00兽200俄罗斯| 动漫在线观看免费肉肉| 粉嫩AV国产一区二区福利姬| 国产99视频在线观看| 国产AV精品一区二区三区漫画| 广东95后小情侣酒店自拍流出| 公和我做好爽添厨房中文字幕 | 日本护士在线观看| 少妇一夜未归暴露妓女身份| 特级做A爰片毛片免费看108| 无限资源日本2019版| 亚洲国产欧美日本大妈| 亚洲欧美国产综合在线| 尤物国产在线精品三区| 18禁裸乳无遮挡免费网站| CHINA篮球体育飞机2022网站| 白丝女仆被啪到深夜漫画| 国产福利视频第一导航| 国产中文字幕乱码免费| 久久精品亚洲精品国产欧美|