西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

這是西門子的一個功能FC,我們可以用它來學習SCL語言,也可以用來分析和學習怎樣做一個比較合理且完整的功能FC。

1. 在設計該功能時,先確定好,它的具體功能,比如:此例的功能是獲取一個隨機實數,該隨機實數是可以定義在自己想要的數值範圍內的,還要考慮一些錯誤代碼的定義,該例子定義了三個錯誤狀態碼,16#7000(無當前任務)、16#0000(任務完成)、16#8200(最大值小於最小值)。 2. 這裡使用一個FC塊,首先定義變量。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

由於變量名稱很清晰地描述了變量功能,所以不逐一解釋。

3. 程序段1。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

塊內變量初始化,三個變量分別賦值0、1、16#7000。

4. 程序段2。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

檢查輸入範圍變量,是否出現最小值大於最大值的情況。

5. 程序段3。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

讀系統時間,用納秒,使用納秒的隨機性。判斷讀系統時間是否有誤,如果有誤,給狀態變量賦值。

6. 程序段4。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

無符號長整型數需要四個字節,每個字節和系統時間納秒的四個字節分別對應,實際上#tempRandomValue就已經是一個隨機的無符號整型數了。

7. 程序段5。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

對#tempRandomValue進行標準化操作,使其變成0.0~1.0之間的一個數據,然後再逆標準化,使這個隨機數產生於我們要求的最小值和最大值之間。

8. 功能調用。如下圖:

西門子PLC用TIA博途SCL語言寫的一個產生隨機實數的指令塊

要生成100.0~1000.0之間的隨機數,以上為效果,每個掃描週期產生一個隨機實數,監控顯示隨機數468.7597。


分享到:


相關文章: