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