基本數(shù)據(jù)類型
基本數(shù)據(jù)類型:包括位、位序列、整數(shù)、浮點數(shù)、日期時間。此外字符也屬于基本數(shù)據(jù)類型,請參見文檔String與WString。
1.位和位序列
2.整數(shù)數(shù)據(jù)類型
3.浮點型實數(shù)數(shù)據(jù)類型
如 ANSI/IEEE 754-1985 標(biāo)準(zhǔn)所述,實(或浮點)數(shù)以 32 位單精度數(shù) (Real) 或 64 位雙精度數(shù) (LReal) 表示。單精度浮點數(shù)的精度最高為 6 位有效數(shù)字,
而雙精度浮點數(shù)的精度最高為 15 位有效數(shù)字。在輸入浮點常數(shù)時,最多可以指定 6 位 (Real) 或 15 位 (LReal) 有效數(shù)字來保持精度。
4.時間和日期數(shù)據(jù)類型
TIME 數(shù)據(jù)作為有符號雙整數(shù)存儲,基本單位為毫秒。存儲的數(shù)值是多少,就代表有多少ms。編輯時可以選擇性使用日期 (d)、小時(h)、分鐘 (m)、秒 (s) 和毫秒 (ms) 作為單位。
不需要指定全部時間單位。例如,T#5h10s 和 500h 均有效。所有指定單位值的組合值不能超過以毫秒表示的時間日期類型的上限或下限(-2,147,483,648 ms 到 +2,147,483,647 ms)。
DATE 數(shù)據(jù)作為無符號整數(shù)值存儲,被解釋為添加到基礎(chǔ)日期 1990 年 1 月 1 日的天數(shù),用以獲取指定日期。編輯器格式必須指定年、月和日。
TOD (TIME_OF_DAY) 數(shù)據(jù)作為無符號雙整數(shù)值存儲,被解釋為自指定日期的凌晨算起的毫秒數(shù)(凌晨 = 0 ms)。必須指定小時(24 小時/天)、分鐘和秒??梢赃x擇指定小數(shù)秒格式。
結(jié)構(gòu)數(shù)據(jù)類型(Struct)
Struct類型是一種由多個不同數(shù)據(jù)類型元素組成的數(shù)據(jù)結(jié)構(gòu),其元素可以是基本數(shù)據(jù)類型,也可以是Struct、數(shù)組等復(fù)雜數(shù)據(jù)類型以及PLC數(shù)據(jù)類型(UDT)等。Struct類型嵌套Struct類型的深度限制為 8 級。Struct類型的變量在程序中可作為一個變量整體,也可單獨使用組成該Struct的元素。Struct 類型可以在DB、OB/FC/FB接口區(qū)、PLC數(shù)據(jù)類型(UDT) 處定義使用。
Struct數(shù)據(jù)類型使用非常靈活,隨時可以使用,但是相對于PLC數(shù)據(jù)類型 (UDT) 有以下缺點,所以建議需要使用Struct類型時,可以使用PLC數(shù)據(jù)類型(UDT)代替。
維護成本增加:如果對一個Struct進行了多次復(fù)制,則在更改過程中該Struct也必需進行相應(yīng)的多次更改。
Struct與 PLC 數(shù)據(jù)類型(UDT)的相同結(jié)構(gòu)不兼容。
由于系統(tǒng)會檢查所有結(jié)構(gòu)元素的類型是否匹配,因而會導(dǎo)致性能下降。
存儲空間要求增加:每個Struct都是一個單獨的對象,其描述信息將加載到PLC中。
Struct應(yīng)用案例
1. 單獨使用組成該Struct的元素時,和普通的變量沒有區(qū)別,只是每出現(xiàn)一個Struct的嵌套層級,變量名增加一個前綴,如圖1-2所示。
圖1 Struct的定義
圖2 Struct的使用
2. Struct可以將一種類型變量放在一起,利于區(qū)分,如圖3-4所示。
圖3 原始結(jié)構(gòu)
圖4 增加了Struct類型的結(jié)構(gòu)
圖4和圖3功能明顯相同,但圖4相對圖3,分類更加清晰。
3. 通訊程序中,通??梢园研枰l(fā)送的數(shù)據(jù)放在一個Struct中,即看做一個整體,這樣在發(fā)送區(qū)只需填寫一個變量即可,如圖5所示。
圖5 使用了圖4定義的Struct類型
4. MOVE指令支持相同Struct類型的直接傳送,如果傳送雙方是大量數(shù)據(jù),并且結(jié)構(gòu)相同,可以先分別將雙方數(shù)據(jù)建立在一個結(jié)構(gòu),然后用一個MOVE指令一次傳送即可,如圖6所示。
程序中直接MOVE,即可傳送整個Struct,而不需要若干MOVE。并且,即使兩邊Struct中的對應(yīng)元素名稱不同也可以傳送成功,如圖7所示。
圖7 Struct的傳送
PLC數(shù)據(jù)類型(UDT)
從TIA 博途 V11 開始,S7-1200 支持PLC數(shù)據(jù)類型(UDT)。
UDT類型是一種由多個不同數(shù)據(jù)類型元素組成的數(shù)據(jù)結(jié)構(gòu),元素可以是基本數(shù)據(jù)類型,也可以是STRUCT、數(shù)組等復(fù)雜數(shù)據(jù)類型以及其它UDT等。UDT類型嵌套UDT類型的深度限制為 8 級。
UDT類型可以在DB、OB/FC/FB接口區(qū)處使用。從TIA 博途 V13SP1 開始,S7-1200 V4.0開始,PLC變量表中的I和Q也可以使用UDT類型。
UDT類型可在程序中統(tǒng)一更改和重復(fù)使用,一旦某UDT類型發(fā)生修改,執(zhí)行軟件全部編譯可以自動更新所有使用該數(shù)據(jù)類型的變量。
定義為UDT類型的變量在程序中可作為一個變量整體使用,也可單獨使用組成該變量的元素。此外還可以在新建DB塊時,直接創(chuàng)建UDT類型的DB,該DB只包含一個UDT類型的變量。
UDT類型作為整體使用時,可以與Variant、DB_ANY類型及相關(guān)指令默契配合。
理論上來說,UDT是Struct類型的升級替代,功能基本完全兼容Struct類型。
UDT建立及應(yīng)用案例
1. 新建UDT
點擊CPU菜單下,PLC數(shù)據(jù)類型中的“添加新數(shù)據(jù)類型”按鈕,如圖1所示。
圖1 新建UDT
2. 在彈出頁面可以添加需要的變量、類型、起始值、注釋等,如圖2所示。
圖2 定義UDT內(nèi)的變量
3. 在圖2紅框處右鍵屬性常規(guī),可以修改該數(shù)據(jù)類型的名稱,如圖3所示。
圖3 修改UDT名稱
4. DB中使用,如圖4所示。
圖4 定義UDT類型的變量
5. 程序中使用,類似于Struct,如圖5所示。
圖5 UDT的使用
6. 根據(jù)UDT定義DB塊,如圖6所示。
圖6 建立UDT類型的DB
此時打開DB塊,可以發(fā)現(xiàn)和在DB中新建UDT變量差了層級,在使用內(nèi)部變量沒有太多差別。并且這種方式下,除非修改UDT,否則無法更改DB塊中的內(nèi)容,如圖7所示,變量均為灰色。重要用途:參見DB_ANY。
圖7 UDT類型的DB展開
7. 從TIA 博途 V14SP1開始,相同結(jié)構(gòu),但不同名稱的UDT的變量,可以直接復(fù)制,如圖8-11所示。
圖8 定義不同名稱的UDT,但內(nèi)部變量類型相同
圖9 使用UDT建立變量
圖10 UDT類型間的MOVE
SCL的版本程序,如圖11所示
圖11 SCL版本程序
UDT在PLC變量表的應(yīng)用
實現(xiàn)功能:將Profinet IO通訊中的I點送入DB,將DB送入Q點,如圖12-16所示。
1. 建立I點和Q點兩個UDT,元素變量類型及排布設(shè)置參照通訊對象
圖12 I點定義的UDT
圖13 Q點定義的UDT
2. PLC變量表和DB塊使用UDT
圖14 PLC變量表中使用圖12-13定義的UDT
圖14 DB塊中使用的UDT類型定義變量
3. 寫MOVE程序傳遞
圖16 程序詳情
SCL版本程序如圖17所示。
圖17 SCL版本程序
S7-1200 數(shù)組數(shù)據(jù)類型(ARRAY)
ARRAY類型是由數(shù)目固定且數(shù)據(jù)類型相同的元素組成的數(shù)據(jù)結(jié)構(gòu)。
ARRAY類型的定義和使用需要注意以下幾點:
ARRAY類型可以在DB、OB/FC/FB接口區(qū)、PLC數(shù)據(jù)類型處定義;無法在PLC變量表中定義。
數(shù)組定義:Array[維度1下限..維度1上限,維度2下限..維度2上限,...]of <數(shù)據(jù)類型>,最多可包含 6 個維度;
數(shù)組元素的數(shù)據(jù)類型包括:除數(shù)組類型、Variant類型以外的所有類型;
數(shù)組下標(biāo)的數(shù)據(jù)類型為整數(shù),下限值必須小于或等于上限值,上下限的限值在S7-1200 V3.0及其以前為Int范圍(-32768~+32767),在S7-1200 V4.0及其以后前為DInt范圍(-2147483648 ~+21474836487),可以使用局部常量或全局常量定義上下限值,數(shù)組的元素個數(shù)受DB塊剩余空間大小以及單個元素大小的限制;
從S7-1200 V2.0開始,下標(biāo)可以不僅僅是常數(shù)、常量,也可以是變量,還可以是混合使用(多維數(shù)組),如果編程語言是SCL的話,下標(biāo)還可以是表達式。使用數(shù)組的變量下標(biāo),可以在程序中很容易地實現(xiàn)間接尋址。注意,下標(biāo)變量必須是符號名,不能是DB1.DBW0這種沒有對應(yīng)符號名的絕對地址。
從S7-1200 V4.2開始,F(xiàn)C的Input/Output/InOut以及FB的InOut可以定義形如Array[*]這種變長數(shù)組,要求必須是優(yōu)化FC/FB塊,在調(diào)用FC/FB的實參中可以填寫任意數(shù)據(jù)類型相同的數(shù)組變量;當(dāng)然,也可以多維變長的數(shù)組,例如Array[*,*]of Int。
數(shù)組可以使用單個數(shù)組元素例如"DB1".Static_1[1],也可以使用整個數(shù)組例如"DB1".Static_1。多維數(shù)組可以降維使用,例如三維數(shù)組:3D[0..2,0..3,0..4]of Int是一個3×4×5大小的Int數(shù)組,3D[0]是一個4×5大小的二維Int數(shù)組,3D[0,1]是一個5個元素的一維Int數(shù)組,當(dāng)然多維數(shù)組下標(biāo)也可以換成變量,例如3D[Tag_1,1]這種;
S7-1200 V4.2開始,多重背景支持?jǐn)?shù)組形式,即Array of FB,這樣可以在FB中使用循環(huán)指令更方便的編寫程序。不支持Array[*] of FB。
注:在TIA 博途 V10.5 SP2,S7-1200 V1.0的時候,曾經(jīng)引入FieldRead 和 FieldWrite 指令,用于數(shù)組下標(biāo)的變址尋址,這種方法在TIA 博途 V11之后可以由下標(biāo)變量完全取代,并且更為簡化,所以該指令也只是位于“移動操作>原有”中,用于早期版本向上移植時使用,它的使用方法參見FieldRead 和 FieldWrite 間接尋址
S7-1200 數(shù)組的基本使用
1. DB中創(chuàng)建
圖1 Array在DB中的創(chuàng)建
2. FC的InOut中創(chuàng)建
圖2 Array在FC形參中的創(chuàng)建
3. 數(shù)組作為實參
圖3 Array作為FC的實參
4. FC程序中使用數(shù)組元素,使用形參
圖4 FC程序中使用形參
5. FC程序中使用數(shù)組元素,下標(biāo)為變址尋址,使用形參
實現(xiàn)以下功能,將0-7這8個數(shù),送入數(shù)組下標(biāo)為0-7的8個元素,如圖5-7所示。
圖5 FC形參設(shè)置
圖6 程序詳情
SCL的版本如圖7所示。
圖7 SCL版本的程序
6. 在程序中直接使用數(shù)組元素
圖8 程序中直接使用數(shù)組元素
7. 在程序中直接使用數(shù)組元素,下標(biāo)為變址尋址
實現(xiàn)以下功能,將0-7這8個數(shù),送入數(shù)組下標(biāo)為0-7的8個元素,如圖9-11所示。
圖9 DB1的定義
圖10 程序詳情
SCL的版本如圖11所示。
圖11 SCL版本程序
Array[*]使用
實現(xiàn)以下功能,使用FC的Input定義數(shù)組Array[*] of Int,求變長數(shù)組元素的總和
1. 使用Array[*] ,必須使用如圖12所示的指令,計算數(shù)組元素的上下限,從而得出元素個數(shù):
圖12 指令位置
2. 定義變量,如圖13所示。賦初始值,計算上下限,如圖14所示。
圖13 定義形參
圖14 計算上下限
(1)輸入Array[*]類型的變量
(2)所求上下限的維數(shù),從1開始,例如一維數(shù)組只能是1,二維數(shù)組可以是1也可以是2
(3)該維數(shù)下的下限/上限,DINT類型
3. 求和,如圖15所示
圖15 求和的程序
4. SCL的版本如圖16所示
圖16 SCL版本程序
5. OB1中調(diào)用實參為不同數(shù)組元素個數(shù)的數(shù)組,如圖17所示。
圖17 OB1調(diào)用程序
Array of FB的使用
實現(xiàn):FB3多次調(diào)用FB4,在FB3內(nèi)部循環(huán)調(diào)用,減少程序量。
FB4的兩個Input:Start,Stop,一個InOut:Run,建立Array[0..7] of FB4。同時建立變量 Array[0..7] of Struct,作為對應(yīng)FB4的輸入和輸出,如圖17所示。
圖17 程序詳情
摘
關(guān)閉
系統(tǒng)數(shù)據(jù)類型(SDT)
系統(tǒng)數(shù)據(jù)類型由系統(tǒng)提供具有預(yù)定義的結(jié)構(gòu),結(jié)構(gòu)由固定數(shù)目的具有各種數(shù)據(jù)類型的元素構(gòu)成,不能更改該結(jié)構(gòu)。系統(tǒng)數(shù)據(jù)類型只能用于特定指令。
可以在DB塊、OB/FC/FB接口區(qū)使用。
表1 常見系統(tǒng)數(shù)據(jù)類型
系統(tǒng)數(shù)據(jù)類型 | 長度字節(jié) | 說明 |
---|---|---|
IEC_TIMER | 16 |
定時器結(jié)構(gòu)。 此數(shù)據(jù)類型可用于“TP”、“TOF”、“TON”、“TONR”、“RT”和“PT”指令。 |
IEC_SCOUNTER | 3 |
計數(shù)值為 SINT 數(shù)據(jù)類型的計數(shù)器結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTU”、“CTD”和“CTUD”指令。 |
IEC_USCOUNTER | 3 |
計數(shù)值為 USINT 數(shù)據(jù)類型的計數(shù)器結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTU”、“CTD”和“CTUD”指令。 |
IEC_COUNTER | 6 |
計數(shù)值為 INT 數(shù)據(jù)類型的計數(shù)器結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTU”、“CTD”和“CTUD”指令。 |
IEC_UCOUNTER | 6 |
計數(shù)值為 UINT 數(shù)據(jù)類型的計數(shù)器結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTU”、“CTD”和“CTUD”指令。 |
IEC_DCOUNTER | 12 |
計數(shù)值為 DINT 數(shù)據(jù)類型的計數(shù)器結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTU”、“CTD”和“CTUD”指令。 |
IEC_UDCOUNTER | 12 |
計數(shù)值為 UDINT 數(shù)據(jù)類型的計數(shù)器結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTU”、“CTD”和“CTUD”指令。 |
ERROR_STRUCT | 28 |
編程錯誤信息或 I/O 訪問錯誤信息的結(jié)構(gòu)。 此數(shù)據(jù)類型用于“GET_ERROR”指令。 |
CREF | 8 | 數(shù)據(jù)類型 ERROR_STRUCT 的組成,在其中保存有關(guān)塊地址的信息。 |
NREF | 8 | 數(shù)據(jù)類型 ERROR_STRUCT 的組成,在其中保存有關(guān)操作數(shù)的信息。 |
VREF | 12 |
用于存儲 VARIANT 指針。 此數(shù)據(jù)類型用在運動控制工藝對象塊中。 |
CONDITIONS | 52 |
用戶自定義的數(shù)據(jù)結(jié)構(gòu),定義數(shù)據(jù)接收的開始和結(jié)束條件。 此數(shù)據(jù)類型用于“RCV_CFG”指令。 |
TADDR_Param | 8 |
指定用來存儲通過 UDP 實現(xiàn)開放用戶通信的連接說明的數(shù)據(jù)塊結(jié)構(gòu)。 此數(shù)據(jù)類型用于“TUSEND”和“TURCV”指令。 |
TCON_Param | 64 |
指定用來存儲那些通過工業(yè)以太網(wǎng)實現(xiàn)開放用戶通信的連接說明的數(shù)據(jù)塊結(jié)構(gòu)。 此數(shù)據(jù)類型用于“TSEND”和“TRCV”指令。 |
HSC_Period | 12 |
使用擴展的高速計數(shù)器,指定時間段測量的數(shù)據(jù)塊結(jié)構(gòu)。 此數(shù)據(jù)類型用于“CTRL_HSC_EXT”指令。 |
表1中的部分?jǐn)?shù)據(jù)類型還可以在新建DB塊時,直接創(chuàng)建系統(tǒng)數(shù)據(jù)類型的DB,如圖1所示。通過這種方法建立出的DB塊可以配合DB_ANY類型使用,參見鏈接1、鏈接2。
此外通過以下方式也可以實現(xiàn)建立系統(tǒng)數(shù)據(jù)類型DB
1. 定時器計數(shù)器自動生成的背景DB
2. 計數(shù)器自動生成的背景DB
3. 開放式用戶通信程序建立的基于TCON_IP_V4(無法通過添加新塊的方式創(chuàng)建)、TADDR_Param、TCON_Param的DB塊
根據(jù)SDT定義DB塊
圖1 建立SDT類型的DB
硬件數(shù)據(jù)類型
硬件數(shù)據(jù)類型:硬件數(shù)據(jù)類型由 CPU 提供??捎糜布?shù)據(jù)類型的數(shù)目取決于 CPU。
根據(jù)硬件配置中設(shè)置的模塊存儲特定硬件數(shù)據(jù)類型的常量。在用戶程序中插入用于控制或激活已組態(tài)模塊的指令時,可將這些可用常量用作參數(shù)。
數(shù)據(jù)類型 | 基本數(shù)據(jù)類型 | 說明 |
REMOTE | ANY |
用于S7通信PUT/GET指令中指定遠(yuǎn)程CPU的數(shù)據(jù)地址,必須以P#指針的形式作為實參 例如P#DB1.DBX0.0 BYTE 10 |
HW_ANY | UINT | 任何硬件組件(如模塊)的標(biāo)識。 |
HW_DEVICE | HW_ANY |
DP 從站/PROFINET IO 設(shè)備的標(biāo)識 例如:在ModuleStates指令中使用 |
HW_DPSLAVE | HW_DEVICE |
DP 從站的標(biāo)識 例如:在ModuleStates、DPNRM_DG指令中使用 |
HW_IO | HW_ANY |
CPU 或接口的標(biāo)識號,該編號在 CPU 或硬件配置接口的屬性中自動分配和存儲 例如:在LED、DPRD_DAT、RDREC指令中使用 |
HW_IOSYSTEM | HW_ANY |
PN/IO 系統(tǒng)或 DP 主站系統(tǒng)的標(biāo)識 例如:在DeviceStates指令中使用 |
HW_SUBMODULE | HW_IO |
重要硬件組件的標(biāo)識 例如:在GETIO指令中使用 |
HW_INTERFACE | HW_SUBMODULE | 接口組件的標(biāo)識 |
HW_IEPORT | HW_SUBMODULE | 端口的標(biāo)識 (PN/IO) |
HW_HSC | HW_SUBMODULE |
高速計數(shù)器的標(biāo)識 例如:在CTRL_HSC、CTRL_HSC_EXT指令中使用 |
HW_PWM | HW_SUBMODULE |
脈沖寬度調(diào)制標(biāo)識 例如:在CTRL_PWM指令中使用 |
HW_PTO | HW_SUBMODULE |
脈沖發(fā)生器標(biāo)識 例如:在CTRL_PTO指令中使用 |
AOM_IDENT | DWORD | AS 運行系統(tǒng)中對象的標(biāo)識 |
EVENT_ANY | AOM_IDENT | 用于標(biāo)識任意事件 |
EVENT_ATT | EVENT_ANY |
用于指定動態(tài)分配給硬件中斷 OB 的事件 例如,在ATTACH、DETACH指令中使用 |
EVENT_HWINT | EVENT_ATT | 用于指定硬件中斷事件 |
OB_ANY | INT |
用于指定任意組織塊 例如,在時間錯誤OB啟動信息中出現(xiàn) |
OB_DELAY | OB_ANY |
指定調(diào)用的延時中斷OB 例如,用于SRT_DINT、CAN_DINT、QRY_DINT指令 |
OB_TOD | OB_ANY |
指定調(diào)用的時間中斷OB 例如,用于SET_TINT、CAN_TINT、ACT_TINT、QRY_TINT指令 |
OB_CYCLIC | OB_ANY |
指定調(diào)用的循環(huán)中斷OB 例如,用于SET_CINT、QRY_CINT指令 |
OB_ATT | OB_ANY |
用于指定動態(tài)分配給事件的硬件中斷OB 例如,用于ATTACH、DETACH指令 |
OB_PCYCLE | OB_ANY | 用于指定循環(huán)OB事件類別事件的組織塊 |
OB_HWINT | OB_ATT | 用于指定發(fā)生硬件中斷時調(diào)用的組織塊 |
OB_DIAG | OB_ANY | 用于指定發(fā)生診斷中斷時調(diào)用的組織塊 |
OB_TIMEERROR | OB_ANY | 用于指定發(fā)生時間錯誤時調(diào)用的組織塊 |
OB_STARTUP | OB_ANY | 用于指定發(fā)生啟動事件時調(diào)用的組織塊 |
PORT | HW_SUBMODULE |
用于指定通信端口 例如,用于自由口、Modbus RTU指令 |
RTM | UINT |
用于指定運行小時計數(shù)器值 例如,用于RTM指令 |
CONN_ANY | WORD | 用于指定任意連接。 |
CONN_OUC | CONN_ANY |
用于指定通過工業(yè)以太網(wǎng)進行開放式通信的連接 例如,用于TCON、TSEND_C指令 |
DB_WWW | DB_ANY |
通過自定義 Web 應(yīng)用生成的 DB 號該數(shù)據(jù)類型在Temp區(qū)域中的長度為 0 例如,用于WWW指令 |
DB_DYN | DB_ANY |
用戶程序生成的DB編號 例如,用于CREAT_DB指令 |
責(zé)任編輯:彭菁
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7030瀏覽量
89034 -
存儲
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85846
原文標(biāo)題:S7-1200數(shù)據(jù)類型
文章出處:【微信號:中泰PLC自動化教學(xué),微信公眾號:中泰PLC自動化教學(xué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論