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

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

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

3天內不再提示

PLC中隨機數產生的幾種方式

CHANBAEK ? 來源:頭條號朝拾憶 ? 作者:頭條號朝拾憶 ? 2023-03-23 13:50 ? 次閱讀

有時為了某些測試需求,需要仿真產生一些數據。 這時,我們可以通過調取指令或自行編寫程序來生成這些隨機數據。

以下以博途為例,簡要說明了隨機數產生的幾種方式:

一、讀取系統時間的納秒作為隨機數

以固定周期直接將系統時間中的納秒輸出到對應變量。

系統時間中的納秒為UDINT類型,轉為INT后,丟棄了高字部分

監視實時的系統時間,取其中的納秒(NANOSECOND,1秒=10^9納秒)

監視一下生成的隨機數的范圍:-32258—32751(5分鐘)

后續可繼續對此數據處理,縮放到需要的區間。

二、由LGF庫(官方提供的通用函數庫)內的隨機數程序生成

該指令原理也是采用納秒,不過處理過程更加細化、完善。

LGF庫

隨機數生成程序如下(只貼了其中關鍵的計算過程):

REGION Calculating random number
    // 將納秒轉換為雙字以便尋址單個字節
    #tempNanoSecondInDWord := UDINT_TO_DWORD(#tempTime.NANOSECOND);
    // 以片段訪問方式將納秒進行字節交換
    #tempRandomValue.%B3 := #tempNanoSecondInDWord.%B0;
    #tempRandomValue.%B2 := #tempNanoSecondInDWord.%B1;
    #tempRandomValue.%B1 := #tempNanoSecondInDWord.%B2;
    #tempRandomValue.%B0 := #tempNanoSecondInDWord.%B3;
    // 隨機數標準化
    #tempNormReal := UDINT_TO_REAL(DWORD_TO_UDINT(#tempRandomValue)) / UDINT_TO_REAL(#MAX_UDINT);
    // 隨機數縮放
    #LGF_RandomRange_Real := ((#tempNormReal * (#maxValue - #minValue) + (#minValue)));
    #error := false;
    #status := #STATUS_FINISHED_NO_ERROR;
    #subfunctionStatus := #SUB_STATUS_NO_ERROR;
    // ENO mechanism is not used
    ENO := TRUE;
END_REGION

在主程序中調用,可設置上下限

三、線性同余法(LCG,Linear Congruential Method)

該方法的核心是以下遞歸公式:

RandNum =(A * RandNum + B)% M

A、B、M均為常數,其中A是 乘數 ,B是 增量 ,M是 模數 ,RandNum是 初始值 ,A、C、M的取值是保證產生高質量隨機數的關鍵。

可以看出,每次新產生的隨機數都跟上一次的數有關系。 隨機數序列中的初始值,我們通常叫做種子。 隨機數的產生需要設置種子,否則隨機數的結果每次運行都將一樣。 通常,我們使用系統時間的納秒作為種子(某些將此作為缺省設置),這在一定程度上保證了種子的唯一性。

由于計算過程最后是對M取余數,余數的范圍就是0—(M-1),這決定了產生的隨機數是有周期性的。 M的大小決定了最大周期的長短,一般取值域的最大值,而A和B也會影響周期。 A、B、M的選取多種多樣,只要保證產生的隨機數有較好的均勻性和隨機性即可。

FC塊,變量定義為雙整型。 模數M可以取值域最大值2^32

種子seed可以采用系統時間或自行設置

隨機數曲線

線性同余法的初始值一旦確定,輸出的序列將固定。 而當獲取某些隨機數序列后,其初始值以及A、B、M也會被反向計算出來。

對于其缺點,可以考慮以下改進方式,每產生n個數,將當前時鐘值MOD M得到的余數作為新的種子。

四、平方取中法

平方取中法由馮·諾依曼提出,它的原理是:首先取一個2s位的整數(種子),平方,得4s位整數,然后取此4s位中間的2s位作為下次運算的種子。 重復該過程,即可得到一個隨機數序列。 (序列中每個數縮放至0.0—1.0范圍內)

例如:取種子365,平方得133225,高位補0,取中間1332,平方得1774224,高位補0,取7742,以此類推.........

#RandInt := SQR(#Seed);
#Seed := (#RandInt MOD 1000000 - #RandInt MOD 100) / 100;
#RandReal := DINT_TO_REAL(#Seed) / 9999.0;

隨機數測試結果

在實踐中,這種方法其實并不好用。 很難說明取什么種子才能保證足夠長的周期。 以種子123為例,在40多個周期后,種子末位便退化產生了00,之后的隨機數成了固定的幾個數值,周期極短。 該算法也有改進空間。

梅森旋轉算法_Mersenne Twister

梅森旋轉算法可以產生高質量的偽隨機數,且效率高效,彌補了以上偽隨機數生成器的不足和缺陷。 它在C++Python編程語言中均有應用。

理解該算法前需要先了解許多前置名詞,線性反饋移位寄存器、級、反饋函數、抽頭序列、本原多項式...... 實在有興趣的可以搜索一下。 我,放棄了。

說到隨機數,不禁想到了因果律:果由因生、有依空立 、事待理成。

所謂的“隨機”,大概不過是事物發展中的個體因為信息偏差,產生的局限認知。

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

    關注

    5013

    文章

    13327

    瀏覽量

    464064
  • 數據
    +關注

    關注

    8

    文章

    7081

    瀏覽量

    89178
  • 仿真
    +關注

    關注

    50

    文章

    4101

    瀏覽量

    133726
  • 程序
    +關注

    關注

    117

    文章

    3792

    瀏覽量

    81161
  • 隨機數
    +關注

    關注

    0

    文章

    18

    瀏覽量

    12028
收藏 人收藏

    評論

    相關推薦

    matlab中產生隨機數的十七種方式

    ) 的該分布的隨機數。例如: (1) R = random('Normal',0,1,2,4): 生成期望為 0,標準差為 1 的(2 行 4 列)2× 4 個正態隨機數 (2) R
    發表于 01-16 11:05

    keil 產生 隨機數

    最近需要用 keil 軟件產生一個0-10的隨機數,請各位大神指點下,有原代碼參考的話就更好了
    發表于 03-12 20:53

    怎么產生更大范圍的隨機數

    labview提供了產生0-1的隨機數函數,怎么產生更大的范圍的隨機數
    發表于 10-26 21:17

    STM32的ADC產生隨機數

    本帖最后由 sunhongdd26 于 2015-7-14 09:58 編輯 因為在做一樣東西需要產生隨機數,范圍在[0,15],在網上找到一種方法,就是利用ADC懸空引腳產生隨機數
    發表于 02-28 11:58

    隨機數產生小程序求助

    剛開始學習Labview,想做一個小程序:打開布爾開關,自動產生0-10范圍內的隨機數,輸出數值控件一直刷新隨機數,開關關閉后,隨機數停止刷新,輸出控件顯示最后一個
    發表于 04-18 23:50

    單片機C語言如何產生隨機數

    單片機C語言如何產生隨機數 隨機數在單片機的應用也是很多的,當然產生隨機數的方法有很多,當中有
    發表于 05-14 15:14

    產生隨機數的方法有哪些

    隨機數在單片機的應用也是很多的,當然產生隨機數的方法有很多,當中有一個就是利用單片機定時器,取出未知的定時器THX和TLX的值,再加以運算得到一個規定范圍內的
    發表于 07-15 09:08

    AT32的隨機數產生

    AT32的隨機數產生為設計者使用AT32芯片時,產生符合應用需求的隨機數,提供設計建議。
    發表于 10-26 06:04

    產生隨機數

    一個自己寫的產生隨機數的工程
    發表于 12-01 15:45 ?13次下載

    單片機產生隨機數的方法

    隨機數在單片機的應用也是很多的,當然產生隨機數的方法有很多,當中有一個就是利用單片機定時器,取出未知的定時器THX和TLX的值,再加以運算得到一個規定范圍內的
    發表于 02-23 10:37 ?2.2w次閱讀

    單片機產生隨機數的兩種方法

    隨機數在單片機的應用也是很多的,當然產生隨機數的方法有很多,當中有一個就是利用單片機定時器,取出未知的定時器THX和TLX的值,再加以運算得到一個規定范圍內的
    發表于 03-01 11:04 ?2307次閱讀

    單片機C語言如何產生隨機數

    C語言中有三個通用的隨機數發生器,分別為 rand函數、random函數、randomize 函數,但是rand函數產生的并不是真意正義上的隨機數,是一個偽隨機數,是根據一個
    的頭像 發表于 11-26 14:25 ?7577次閱讀

    STM8單片機產生隨機數

    最近需要用到單片機隨機數,但是用rand()產生隨機數,發現每次單片機上電時產生隨機數都是一樣的,沒有實現真正的
    發表于 11-23 17:21 ?13次下載
    STM8單片機<b class='flag-5'>產生</b><b class='flag-5'>隨機數</b>

    單片機C語言如何產生隨機數

    隨機數在單片機的應用也是很多的,當然產生隨機數的方法有很多,當中有一個就是利用單片機定時器,取出未知的定時器THX和TLX的值,再加以運算得到一個規定范圍內的
    發表于 02-08 17:12 ?11次下載
    單片機C語言如何<b class='flag-5'>產生</b><b class='flag-5'>隨機數</b>

    PLC輸出0~100之間的隨機數編寫

    由于西門子PLC不提供隨機數相關函數,在需要用到隨機數的情況下,只能自己手動去寫,下面來教大家寫一個簡單的0~100之間的隨機數
    發表于 10-11 12:22 ?3918次閱讀
    <b class='flag-5'>PLC</b>輸出0~100之間的<b class='flag-5'>隨機數</b>編寫
    主站蜘蛛池模板: 国产成人精品免费青青草原app| 亚洲精品久久久无码AV片软件| 大岛优香久久中文字幕| 亚洲电影第1页| 免费久久狼人香蕉网| 国产小视频在线高清播放| a国产成人免费视频| 亚洲色t图| 视频成人永久免费下载| 麻豆国产成人AV在线| 国产亚洲va在线电影| www.精品久久| 在线成年av动漫电影| 无人在线观看免费高清视频播放| 免费精品美女久久久久久久久| 国偷自产视频一区二区99| max girls 大感谢祭| 这里只有精品在线视频| 亚洲aaaa级特黄毛片| 全部老头和老太XXXXX| 看看妇女的B免费看| 好男人在线观看视频观看高清视频免费 | 色人阁影视| 漂亮的保姆3集电影免费观看中文| 久久精品日本免费线| 国精产品一区一区三区有限在线| 国产精品…在线观看| 范冰冰hdxxxx| 成人综合在线视频免费观看完整版| 91精品国产免费入口| 中文字幕人成乱码中国| 影音先锋亚洲AV少妇熟女| 亚洲日韩天堂在线中文字幕| 亚洲AV久久久噜噜噜噜| 性欧美videos俄罗斯| 无码137片内射在线影院| 三级网站视频| 三级网站视频在线观看| 色欲无码国产喷水AV精品| 日韩欧美高清一区| 色mimi|