[西门子] 西门子 S7-1200 系列六:S7-1200(1500适用)控制系统程序中数据类型详解(上)

[复制链接]
查看297 | 回复0 | 2024-5-15 20:36:31 | 显示全部楼层 |阅读模式
在开始本次分享之前,先声明几个我们控制中常用的几个概念特别是字节和位的概念:

  • 计算机/PLC处理器中不能直接识别数字,只能识别二进制数字即0,1码;
  • 位:Bit,PLC程序中最小的数据单位;
  • 字节:Byte,1个字节由8个位组成;
  • 字:Word ,2个字节,16个位组成;(列举常用的,下面有详细解释)
  • 浮点数/实数:float或Real,4个字节,32个位组成
  • 所有整数数据的最大值(无符号)计算即2的位次方-1,例如:位:2^1^-1=1; 字:2^16^-1=65535
  • 对于有符号(即正负数)整数,最高位代表符号位,当最高位为1时代表负数;以有符号整数int为例:最小值=-(2^15^)=-32768,最大值=2^15^-1=32767**(为什么不是-32767~+32767是因为+0,-0的存在,人为规定最小值是-32768)**
基本数据类型
基本数据类型:包括位、位序列、整数、浮点数、日期时间。此外字符也属于基本数据类型
位和位序列
注意:虽然位序列有数值表示方式,但一般不直接用于数学运算。通常在控制字、状态字、错误代码、标志字、状态位集合等处使用位序列。而数学运算使用下面的整数数据类型与浮点数数据类型。
整数数据类型
数据类型位大小数值类型数值范围常数示例地址示例Bool1布尔运算FALSE 或者 TRUETRUE

  • I1.0
  • Q0.1
  • M50.7
  • DB1.DBX2.3
  • Tag_name
二进制2#0 或 2#12#0无符号整数0 或 11八进制8#0 或 8#18#1十六进制16#0 或 16#116#1数据类型位大小数值范围常数示例地址示例USInt80 到 25578、2#01001110

  • MB0
  • DB1.DBB4
  • Tag_name
SInt8-128 到 127+50、16#50UInt160 到 6553565295、0

  • MW2
  • DB1.DBW2
  • Tag_name
Int16-32768 到 3276730000、+30000UDInt320 到 4_294_967_2954042322160

  • MD6
  • DB1.DBD8
  • Tag_name
DInt32-2_147_483_648 到 2_147_483_647-2131754992浮点型实数数据类型
如 ANSI/IEEE 754-1985 标准所述,实(或浮点)数以 32 位单精度数 (Real) 或 64 位双精度数 (LReal) 表示。  单精度浮点数的精度最高为 6 位有效数字,
而双精度浮点数的精度最高为 15 位有效数字。在输入浮点常数时,最多可以指定 6 位 (Real) 或 15 位 (LReal) 有效数字来保持精度。
数据类型位大小数值范围常数示例地址示例Real32-3.402823e+38 到 -1.175495e-38、±0、+1.175 495e-38 到 +3.402823e+38123.456、-3.4、1.0e-5

  • MD100
  • DB1.DBD8
  • Tag_name
LReal64-1.7976931348623158e+308 到 -2.2250738585072014e-308、
      ±0、
      +2.2250738585072014e-308 到 +1.7976931348623158e+30812345.123456789e40、1.2E+40

  • DB_name.var_name
              注意:
              • 不支持直接寻址

时间和日期数据类型
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  小时/天)、分钟和秒。 可以选择指定小数秒格式。
数据类型位大小范围常数示例Time32T#-24d_20h_31m_23s_648ms 到 T#24d_20h_31m_23s_647ms
    存储形式: -2,147,483,648 ms 到 +2,147,483,647 ms

  • T#5m_30s
  • T#1d_2h_15m_30s_45ms
  • TIME#10d20h30m20s630ms
  • 500h10000ms
  • 10d20h30m20s630ms
DATE16D#1990-1-1 到 D#2168-12-31

  • D#2009-12-31
  • DATE#2009-12-31
  • 2009-12-31
TOD/
    Time_of_Day
32TOD#0:0:0.0 到 TOD#23:59:59.999

  • TOD#10:20:30.400
  • TIME_OF_DAY#10:20:30.400
  • 23:10:1
结构数据类型(Struct)
Struct类型是一种由多个不同数据类型元素组成的数据结构,其元素可以是基本数据类型,也可以是Struct、数组等复杂数据类型以及PLC数据类型(UDT)等。Struct类型嵌套Struct类型的深度限制为  8 级。Struct类型的变量在程序中可作为一个变量整体,也可单独使用组成该Struct的元素。Struct  类型可以在DB、OB/FC/FB接口区、PLC数据类型(UDT) 处定义使用。
Struct数据类型使用非常灵活(小编的最爱),随时可以使用;可以使程序数据结构更加清晰直观,易于维护,扩展性强;例如将相同类型电机相关的数据以结构体存放,便于批量复制和使用;
image-20240514150457587
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类型发生修改,执行软件全部编译可以自动更新所有使用该数据类型的变量。
image-20240514151358553
S7-1200 数组数据类型(ARRAY)
ARRAY类型是由数目固定且数据类型相同的元素组成的数据结构。ARRAY类型的定义和使用需要注意以下几点:

  • ARRAY类型可以在DB、OB/FC/FB接口区、PLC数据类型处定义;无法在PLC变量表中直接定义。
  • 数组定义:Array[维度1下限..维度1上限,维度2下限..维度2上限,...]of <数据类型>,最多可包含 6 个维度;(常用1维数组)
  • 数组元素的数据类型包括:除数组类型、Variant类型以外的所有类型;
  • 数组下标的数据类型为整数,下限值必须小于或等于上限值;
  • 从S7-1200  V2.0开始,下标可以不仅仅是常数、常量,也可以是变量,还可以是混合使用(多维数组),如果编程语言是SCL的话,下标还可以是表达式。W0这种没有对应符号名的绝对地址。
  • 从S7-1200  V4.2开始,FC的Input/Output/InOut以及FB的InOut可以定义形如Array
  • 这种变长数组,要求必须是优化FC/FB块,在调用FC/FB的实参中可以填写任意数据类型相同的数组变量;
  • 数组可以使用单个数组元素例如"DB1".Static_1[1],也可以使用整个数组例如"DB1".Static_1。
  • S7-1200 V4.2开始,多重背景支持数组形式,即Array of FB,这样可以在FB中使用循环指令更方便的编写程序。
image-20240514152535582
系统数据类型(SDT)
系统数据类型由系统提供具有预定义的结构,结构由固定数目的具有各种数据类型的元素构成,不能更改该结构。系统数据类型只能用于特定指令。  可以在DB块、OB/FC/FB接口区使用。常见数据类型如下表:
系统数据类型长度字节说明IEC_TIMER16定时器结构。
此数据类型可用于“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”指令。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则