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

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

3天內(nèi)不再提示

西門子SCL建立功能塊ACQUIRE的步驟

機器人及PLC自動化應用 ? 來源:機器人及PLC自動化應用 ? 2023-04-15 09:52 ? 次閱讀

聲明部分的結(jié)構(gòu)(Structure of the Declaration Section)

塊中的聲明部分包含以下子域:

常量:在CONST和END_CONST之間。

輸入參數(shù):在VAR_INPUT和END_VAR之間。

輸出參數(shù):在VAR_OUTPUT和END_VAR之間。

靜態(tài)變量:在VAR和END_VAR之間。也包括對EVALUATE塊的本地實例的聲明。

CONST
LIMIT := 7;
QUANTITY := LIMIT + 1;
END_CONST
VAR_INPUT 輸入變量聲明
measval_in :INT ; // 新測量值
newval :BOOL; // 在環(huán)形緩沖區(qū)"measvals"中的測量值
resort :BOOL; // 對測量值進行排序
funct_sel :BOOL; // Select calculation square root/square
newsel :BOOL; // 取得輸出地址
selection :WORD; // 輸出地址
END_VAR
VAR_OUTPUT 輸出變量聲明

result_out :INT; // 計算值
measval_out:INT; // 相應的測量值
END_VAR
VAR 靜態(tài)變量聲明
measvals:ARRAY[0..LIMIT] OF INT := 8(0);
resultbuffer:ARRAY[0..LIMIT] OF
STRUCT
squareroot:INT;
square:INT;
END_STRUCT;
pointer:INT:= 0;
oldval:BOOL:= TRUE;
oldsort:BOOL:= TRUE;
oldsel:BOOL:= TRUE;
address:INT:= 0; // 轉(zhuǎn)換后的輸出地址
outvalues_instance: EVALUATE;// 定義本地實例
END_VAR

靜態(tài)變量(Static Variables)

因為某些數(shù)據(jù)要保留到下一個程序循環(huán),所以選擇FB塊類型。有些靜態(tài)變量在聲明部分"VAR, END_VAR"中聲明。

靜態(tài)變量是本地變量,其值保留貫穿每個塊處理過程。他們用來保留功能塊的值,且存貯在實例數(shù)據(jù)塊中。

初始化變量(Initializing Variables)

記住當塊被初始化時(下載CPU之后),在變量中鍵入初始值。功能塊EVALUATE的本地實例也在聲明子域"VAR, END_VAR"中聲明。其名字是以后調(diào)用和存取輸出參數(shù)使用的。共享的實例ACQUIRE_DATA用來存貯數(shù)據(jù)。

語句部分的結(jié)構(gòu)(Structure of the Statement Section)

ACQUIRE的語句部分分為三個子部分:

獲取測量值:
如果輸入?yún)?shù)"newval"與"oldval"不同,則讀入一個新測量值到環(huán)形緩沖區(qū)。

啟動排序和計算:
比較輸入?yún)?shù)"resort"和"oldsort",發(fā)生改變時,通過調(diào)用EVALUATE功能塊啟動排充和計算。

求取代碼并準備輸出:
按字讀取代碼。根據(jù)SIMATIC轉(zhuǎn)換規(guī)則,意思是上開關(guān)組(字節(jié)0)包含輸入字的高8位,下開關(guān)組(字節(jié)1)包含低8位。下圖顯示代碼開關(guān)的位置。

計算地址(Calculating the Address)

下圖顯示如何計算地址:檢測取碼開關(guān)(位15)一個邊沿,輸入字IW0的12至14位包含了讀入的代碼。用標準函數(shù)SHR右移并用AND屏蔽相應的位得到“地址”。

地址用來將數(shù)組元素(計算結(jié)果和對應測量值)寫入輸出參數(shù)。是均方根據(jù),還是平方值決定于"funct_sel"。

檢測到取碼開關(guān)的一個邊沿,是因為"newsel"和"oldsel"不同。

2dff77b6-dadf-11ed-bfe3-dac502259ad0.png

邏輯塊的語句部分如下:

BEGIN
(*****************************************************************
第1部分:獲取測量值。

如果"newval"值發(fā)生改變,則輸入了測量值。MOD運算是用來實現(xiàn)測量值用的環(huán)形緩沖區(qū)。
******************************************************************)
IF newval <> oldval THEN
pointer := pointer MOD QUANTITY;
measvals[pointer] := measval_in;
pointer := pointer + 1;
END_IF;
oldval := newval;
(*****************************************************************
第2部分:啟動排序和計算

如果"resort"發(fā)生改變,則啟動對環(huán)形緩沖區(qū)的排序和運行對測量值的計算。

結(jié)果存貯在一個新的叫"calcbuffer"的數(shù)組里。
******************************************************************)
IF resort <> oldsort THEN
pointer := 0; //復位緩沖區(qū)指針
eval_instance(sortbuffer := measvals); //調(diào)用EVALUATE
END_IF;
oldsort := resort;
resultbuffer := eval_instance.calcbuffer; //平方值和均方根

(*****************************************************************
第3部分:求代碼值和準備輸出

如果"newsel"發(fā)生改變,則計算用來輸出的數(shù)組元素的尋址代碼:屏蔽"selection"

的相應位并轉(zhuǎn)換為整數(shù)。依據(jù)"funct_sel"開關(guān)的設(shè)置,選擇"squareroot"或

"square"用于輸出。
******************************************************************)
IF newsel <> oldsel THEN
address := WORD_TO_INT(SHR(IN := selection, N := 12) AND 16#0007);
END_IF;
oldsel := newsel;
IF funct_sel THEN
result_out := resultbuffer[address].square;
ELSE
result_out := resultbuffer[address].squareroot;
END_IF;
measval_out := measvals[address]; //Measured value display
END_FUNCTION_BLOCK






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 西門子
    +關(guān)注

    關(guān)注

    93

    文章

    2977

    瀏覽量

    115339
  • VaR
    VaR
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    11305
  • SCL
    SCL
    +關(guān)注

    關(guān)注

    1

    文章

    239

    瀏覽量

    17015

原文標題:西門子SCL 建立功能塊ACQUIRE(獲得)

文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何去制作出完美的西門子的modbus Rtu/Tcp指令功能塊?

    如何去制作出完美的西門子的modbus Rtu/Tcp指令功能塊?有哪些步驟可以分享一下嗎?
    發(fā)表于 07-02 06:44

    如何去使用西門子的modbus Rtu/Tcp通訊功能塊

    請問一下怎樣去制作西門子的modbus Rtu/Tcp通訊功能塊呢?如何去使用西門子的modbus Rtu/Tcp通訊功能塊呢?
    發(fā)表于 09-08 06:32

    淺談西門子PLC的“SCL語言”編程

    介紹西門子PLC的“SCL語言”編程,相關(guān)編程代碼
    發(fā)表于 01-22 17:25 ?0次下載

    西門子PLC的功能功能塊

    本文檔的主要內(nèi)容詳細介紹的是西門子PLC的功能功能塊。
    發(fā)表于 11-09 17:49 ?63次下載
    <b class='flag-5'>西門子</b>PLC的<b class='flag-5'>功能</b>和<b class='flag-5'>功能塊</b>

    西門子PLC系統(tǒng)功能塊和系統(tǒng)功能

    系統(tǒng)功能塊(SFB )和系統(tǒng)功能(SFC ) 已經(jīng)編好程序 用戶不需要每個功能都自己編程。S7 CPU為用戶提供了一些已經(jīng)編好程序,這些
    的頭像 發(fā)表于 12-23 17:55 ?1.1w次閱讀

    西門子TDC編程語言CFC功能塊詳細說明

    西門子TDC編程語言CFC功能塊詳細說明免費下載。
    發(fā)表于 04-22 10:06 ?21次下載

    西門子PLC中使用SCL語言編程的技巧

    西門子PLC中使用SCL語言編程的技巧說明。
    發(fā)表于 04-22 11:15 ?63次下載

    西門子PLC FB41中PID功能塊說明和調(diào)整方法

    西門子PLC FB41中PID功能塊說明和調(diào)整方法說明。
    發(fā)表于 04-22 11:48 ?13次下載

    淺談西門子PLC的SCL語言編程

    西門子PLC的SCL語言編程說明。
    發(fā)表于 04-22 14:39 ?46次下載

    淺談西門子SCL編程

    淺談西門子SCL編程資料免費下載。
    發(fā)表于 04-23 10:44 ?27次下載

    西門子TDC編程語言CFC功能塊詳細說明中文版

    西門子TDC編程語言CFC功能塊的詳細介紹說明。
    發(fā)表于 04-30 14:15 ?0次下載

    西門子SCL語言編程系列-寫立方根FB

    由于西門子PLC本身并沒有帶求立方根的指令,我們用SCL來寫一個求立方根的FB
    的頭像 發(fā)表于 02-06 15:17 ?1811次閱讀
    <b class='flag-5'>西門子</b><b class='flag-5'>SCL</b>語言編程系列-寫立方根FB<b class='flag-5'>塊</b>

    普通電機功能塊的封裝

    學過西門子TIA(博途)的朋友都知道它的FC/FB非常好用,深受開發(fā)者的喜歡,今天我們簡單的講一個普通電機功能塊的封裝。
    的頭像 發(fā)表于 03-13 17:46 ?1435次閱讀
    普通電機<b class='flag-5'>功能塊</b>的封裝

    西門子博圖SCL練習1:使用FC計算平均值

    西門子博圖SCL練習1:使用FC計算平均值
    的頭像 發(fā)表于 01-02 10:25 ?2455次閱讀
    <b class='flag-5'>西門子</b>博圖<b class='flag-5'>SCL</b>練習1:使用FC計算平均值

    西門子PLC中OB功能詳解

    西門子PLC(Programmable Logic Controller)作為工業(yè)自動化領(lǐng)域的核心設(shè)備,其內(nèi)部功能強大、應用廣泛。在西門子PLC中,OB(Organization B
    的頭像 發(fā)表于 06-15 11:27 ?3424次閱讀