默認情況下,STEP 7-Micro/WIN SMART沒有集成模擬量處理的指令,我們需要自己編寫量程轉換的子程序才能完成模擬量的處理。這種量程轉換的原理可以看看我之前寫的文章(怎樣將模擬量的信號值轉換成工程量值?)。今天這篇文章,我想告訴大家一種相對簡單的模擬量處理方式——使用Scale指令庫。
Scale指令庫其實也是西門子內部人員編寫的,但不是官方正式發布的。我覺的這個指令庫還是蠻方便的,值得推薦給大家使用。下面我們分兩個步驟介紹:1)怎樣添加Scale指令庫?2)怎樣使用里面的指令?
1、怎樣添加Scale指令庫?
首先需要下載Scale指令庫。從哪里下載呢?可以到西門子的網站上搜索,另外文章的末尾提供下載的方法。
下載好后,將其放在一個指定的文件夾中。然后打開STEP 7-Micro/WIN SMART ,單擊【工具】菜單的【選項】按鈕,在彈出的對話框中,單擊【項目】,你會看到一個用戶庫文件夾路徑的設置,其默認路徑如下圖:
你可以將下載的Scale指令拷貝到這個文件夾中,也可以單擊【瀏覽】將用戶庫文件夾指定到你當前存放的路徑,單擊【確定】后,就可以在【指令】-【庫】中看到你新添加的scale指令。
下面這張圖是我添加用戶指令庫前后的對比(當然,除了Scale還添加了一些其它指令庫):
2、怎樣使用Scale指令庫
Scale指令庫(v1.2)中有三條指令:S_ITR、S_RTR、S_RTI。名稱中的"S"代表"Scale",表示"量程";"I"代表"Integer",即"整數";"R"代表"Real",即"實數";"T"代表"To",即"轉換"的意思;
這樣就很好理解了,比如:S_ITR,就表示 Scale ,integer to real ,也就是整數到實數的量程轉換;而S_RTI,就表示,Scale,real to integer,也就是實數到整數的量程轉換;S_RTR,就表示,Scale,real to real,也就是實數到實數的量程轉換;
下面來具體看一下:
2.1、S_ITR
該指令可以處理模擬量輸入信號,并轉換成相應的工程值,其初始添加到程序塊中的狀態如下圖所示:
該指令有6個輸入參數和1個輸出參數,含義如下:
EN:布爾值,指令使能;
Input:整數,要轉換的變量;
ISH:Input Scaled High,整數,輸入量程的上限;
ISL:Input Scaled Low,整數,輸入量程的下限;
OSH:Output Scaled High,實數,輸出量程的上限;
OSL:Output Scaled Low,實數,輸出量程的下限;
Output:實數,轉換后的變量;
舉例說明:
假設模擬量輸入模塊連接的外部壓力傳感器,輸入信號為0~20mA的電流信號,壓力的范圍為0~10000 mbar,輸入通道的地址為:AIW16,轉換后數據存放在VD0中,則代碼如下:
如果壓力傳感器的信號為4~20mA,則需要把ISL的值改為5530,代碼如下:
2.2、S_RTI
該指令可以將工程值轉換成模擬量值進行輸出,其初始添加到程序塊中的狀態如下:
該指令有6個輸入參數和1個輸出參數,含義如下:
EN:布爾值,指令使能;
Input:實數,要轉換的變量;
ISH:Input Scaled High,實數,輸入量程的上限;
ISL:Input Scaled Low,實數,輸入量程的下限;
OSH:Output Scaled High,整數,輸出量程的上限;
OSL:Output Scaled Low,整數,輸出量程的下限;
Output:整數,轉換后的變量;
舉例說明:
假設使用4~20mA的模擬量輸出信號控制比例閥的輸出壓力,其輸出量程范圍為:0~6000mbar,輸出通道的地址為AQW32,輸出壓力設定值存放在VD4,則代碼如下:
假設輸出±10V的電壓信號用于速度控制,正值表示正轉,負值表示反轉,轉速絕對值的范圍為:0~3000r/min,輸出通道AQW34,輸出設定值VD8,則代碼如下:
2.3、S_RTR
該指令可以進行實數與實數的量程轉換,它的輸入參數和輸出參數都是實數;
舉個例子:
我們在實例1中獲取了一個壓力值放在VD0(pressureValue),它是范圍為0~10000mbar的數值,我們想把當前壓力值以其量程的百分數表示出來,轉換值存放在VD12(pressurePercentage)中,就可以使用如下的代碼:
好了,這就是Scale指令庫的指令介紹,主要用于模擬量信號的處理。