Simulator [ˈsɪmjəˌletɚ] 模擬器
KepServerEx是一款在工業控制中比較常見的數據采集服務軟件之一,提供了多種類型的驅動,具有比較廣泛的適用性。很多廠商和個人都會選擇用它來做OPCServer。在項目的實施或測試過程中,我們有時會遇到身邊沒有傳感器、PLC之類設備的情況,就無法通過實時數據來測試工作成果的有效性。幸運的是KepServerEx提供了數據模擬功能,可以提供多種類型、格式的模擬數據。下面就是具體的配置過程,重點在於模擬數據的函數( 斜坡函數、隨機函數、正弦函數、User 函數)
1. 配置過程:
創建Channel
Channel即通道,可以將它理解為OPC中的Server。
設備驅動選擇“Simulator”,即模擬器驅動。然后一直點擊下一步完成...
通道名字隨便取。
剩余幾項設置也可以調整,如果需要可以自行調整
創建Device
Device即設備,可以理解為OPC中的Group。
Device 隨便起個名。
設備類型可以根據需要選擇16位或8位。
設備ID,可以自行修改。
選擇‘掃描模式’
下一步,完成。
創建Tag
Tag即標簽,可理解為OPC中的Item。現在才來到整篇文章的重點。
添加標簽的界面包含兩部分:
一部分是對標簽的定義(Identification),包括名稱(Name)、地址(Address)、描述(Description)
另一部分是數據的屬性(Data Properties),包括數據類型(DataType )、讀寫類型(Client)、掃描頻率(Scan Rate)
對我們而言,用處最大的就是Address,我們可以編寫不同的函數放在Address中用來模擬不同類型的數據。官方文檔提供了多種模擬函數供我們使用(可在幫助文檔中找到)。
=====================================================
2. 模擬寄存器(可讀/寫)
(B寄存器、K寄存器、R寄存器、S寄存器)
B寄存器為布爾型, R 和 K 寄存器為數字數據, S 寄存器是可變長度字符串數據位置。
當 R 寄存器作為字符、字節、字、短整型、BCD、長整型、雙字型、雙長整型、四字型或 LBCD 引用時,它將通過每次讀取時遞增 1 的方式來模擬不斷更改的數據。這些類型的數組在每次讀取時遞增 1。當 R 寄存器作為浮點型或雙精度型引用時,值在每次讀取時遞增 1.25。浮點型或雙精度型的數組在每次讀取時遞增 1.25。每種類型均有增量范圍。對於浮點型,范圍為 0 至 32767。對於雙精度型,范圍為 0 至 65535。
8 位設備地址
16 位設備地址
注意:
- 除位級布爾值之外,所有數據類型均支持數組 (將 [r] 或 [r][c] 附加到地址后面)。
- 為數據類型指定的地址必須滿足數據類型的完整大小。這意味着用戶的寫操作不能超出數據范圍。
在標簽創建界面可以設置標簽的屬性
標簽創建完成之后 點擊KepServer自帶的QC 客戶端,對數據進行讀取和寫入
=====================================================
3. 模擬函數(只讀)
(斜坡函數、隨機函數、正弦函數、User 函數)
模擬函數可用於創建模擬許多真實數據源的 OPC 項。每一個模擬函數均提供了不同的輸出,這些輸出具有多個常見屬性,例如速率、下限和上限。“速率”(也稱為更改率) 可用於指定模擬值更改狀態的頻率。速率值以毫秒計數的形式輸入,其范圍介於 10 至 3600000 之間。此更改率完全獨立於客戶端應用程序讀取數據的頻率。與 PLC 類似,模擬函數始終在后台運行。
“下限”和“上限”
“下限”和“上限”屬性可用於指定由模擬函數生成的數據的范圍。通過使用“下限”和“上限”屬性,用戶可以生成模擬值,只需調整數據范圍即可對這些模擬值進行偏移。對於支持限制的模擬函數,范圍的輸入格式可用於確定模擬值的數據類型。例如,輸入斜坡標記時,如果下限為 75,上限為 3000,則生成的 OPC 項會被視為長整型數據類型。輸入相同的斜坡標記時,如果下限為 75.123,上限為 3000.567,則生成的 OPC 項會被視為浮點型數據類型。在這兩個示例中,默認的數據格式為浮點型或長整型,但可選擇任何可用的數據類型作為任何模擬函數的輸出格式。但是,由下限和上限指定的范圍必須與所需的數據類型選項相匹配。
與上述基於寄存器的地址不同,可輸入的模擬函數數目並沒有限制。每個具有唯一屬性的模擬函數將被視為新的模擬值。因此,為了在客戶端應用程序中讀取多個位置的相同值,我們需要創建尋址模擬函數,這時,在每種情況下采用相同方式輸入模擬函數至關重要。
模擬函數為只讀對象
模擬函數為只讀對象。一旦客戶端應用程序開始從模擬函數中讀取數據,該函數即會繼續生成數據,直到客戶端應用程序將項刪除為止。輸入浮點屬性時,模擬函數不接受指數形式的數字值條目。
A. 斜坡函數
RAMP(速率,下限,上限,增量)
斜坡函數用於創建指定數字范圍內遞增或遞減的值。應使用下限和上限設置所需的范圍。可調整下限或上限,以對生成的數據應用偏移。增量值可為正數或負數。如果增量值為正,則值將以所需速率生成由下限到上限的斜坡。如果增量值為負,則值將以所需速率生成由上限到下限的斜坡。輸入的下限、上限和增量值可為整數或浮點格式。
支持的數據類型
字節、字符、字、短整型、雙字型、長整型、浮點型、雙精度
RAMP(Rate, Low Limit, High Limit, Increment)
Rate:變化率,單位毫秒
Low Limit:下限值
High Limit:上限值
Increment:變化量
舉例:
RAMP(120, 35, 100, 4)
從35 增長到100,每120毫秒增長4。
RAMP(300, 150.75, 200.50, -0.25)
從200.50降低到150.75,每300毫秒減少0.25。
B. 隨機函數
RANDOM(速率, 下限, 上限)
斜坡函數用於創建指定數字范圍內可隨意更改的項。應使用下限和上限設置所需的范圍。可調整下限或上限,以對生成的數據應用偏移。
支持的數據類型
字節、字符、字、短整型、雙字型、長整型、浮點型、雙精度
RANDOM(Rate, Low Limit, High Limit)
Rate:變化率,單位毫秒
Low Limit:下限值
High Limit:上限值
示例
RANDOM(30, -20, 75)
將創建速率為 30 毫秒的從 -20 到 75 隨機變化的值。
C. 正弦函數(三角函數型)
正弦 SINE (“速率”、“下限”、“上限”、“頻率”、“相位”)
正弦函數可用於創建遵循正弦值更改的項。應使用下限和上限設置所需的范圍。可調整下限或上限,以對生成的數據應用偏移。
“頻率”屬性可用於指定所需的波形 (以赫茲為單位)。最大的有效頻率大約為 5 赫茲。“頻率”屬性的有效范圍為 0.001 至 5 赫茲。
“相位”屬性可用於偏移由特定角度生成的正弦波。輸入“相位”的范圍應在 0.0 到 360.0 之間。在這種情況下,對於模擬函數的運行方式,“速率”屬性起到了關鍵作用。為了獲得此函數的良好正弦輸出,“速率”必須至少比所需“頻率”快兩倍。
例如,對於在 200 毫秒的速率下發生變化的正弦波,如果用戶想要得到 5 赫茲的正弦波,則“速率”屬性的最大值應設置為 100 毫秒。為了獲得最佳的正弦波結果,建議將“速率”設置為 10 或 20 毫秒。正弦函數“速率”的有效范圍為 10-1000 毫秒。
支持的數據類型
浮點型、雙精度
SINE(Rate, Low Limit, High Limit, Frequency, Phase)
Rate:變化率/變化周期,單位毫秒
Low Limit:下限值
High Limit:上限值
Frequency:三角函數頻率
Phase:三角函數偏移量
示例
正弦 (10、-40、40、2、0)
這將創建頻率為 2 赫茲的正弦值,其范圍介於 -40 至 40 之間,並且不具有相位偏移。
D. User 函數(用戶自定義型)
USER(速率, 用戶值 1, 用戶值 2, 用戶值 3, ...用戶值 N)
USER 函數為定義模擬函數返回的數據類型提供了最大的靈活性。與其他函數在指定范圍內進行操作有所不同,USER 函數可用於指定一組數字或字符串值以指定速率進行循環。輸入的值用於確定項目的數據類型。例如,如果輸入 100.45 作為用戶值之一,模擬對象的輸出將被視為浮點數據。如果其中一個輸入的用戶值是 "Hello World",則模擬對象的輸出將被視為字符串數據。定義項目后,可通過指定所需的數據類型來覆蓋這些默認選擇。
注意:當輸入用戶值為字符串時,可以通過在字符串前添加反斜杠 "\," 來在字符串中輸入逗號。
支持的數據類型
布爾型、字節、字符、字、短整型、雙字型、長整型、浮點型、雙精度
注意:USER 模擬函數中輸入的值用於確定默認數據類型。
USER(Rate, User Value1, User Value2, User Value3,…User ValueN)
Rate:變化率,單位毫秒
User Value1….ValueN:用戶自定義的值,可以有多個
示例
USER(250, Hello, World, this, is, a, test)
這會創建以 250 毫秒速率從序列中的一個文本自動更改為下一個的字符串數據類型值。
USER(20, 1.25, 100.56, 200.11,75.1)
這會創建以 20 毫秒速率從序列中的一個浮點值更改為下一個的浮點數據類型值。
USER(50, 1,1,0,1,0,1,0,0,1,1,1,0,0,0)
這會生成以 50 毫秒速率從序列中的一個布爾狀態更改為下一個的布爾型值。這可用於創建非常復雜的位陣列。
USER(1000, In this case\, , I needed to use a \, in , my text)
需要在這些文本片段中添加 "\," 以便在文本值中插入一個逗號。此外,如有需要,每個值的文本可以是句子或句子片段。
--------------------------
5. 創建自己需要的標簽
有了上面的函數我們可以根據自己的需要創建不同類型的標簽。
RANDOM(200, 10.0, 40.0)模擬室內溫度
RANDOM(200, 30.0, 90.0)模擬室內濕度
USER(1000, 1,1,0,1,0,1,0,0)模擬開關比變化量
RAMP(5000, 0, 1000, 1)模擬人員進入數量
將標簽添加完之后保存,用OPC Client連接就 可以看到數據在愉快的跳動了。
---------------------------------------------------------------------------------------------------------