首页 > 其他分享 >西门子PLC数据类型1-位、位序列、整数、浮点数、日期时间

西门子PLC数据类型1-位、位序列、整数、浮点数、日期时间

时间:2024-04-16 15:12:21浏览次数:17  
标签:字符 存储 进制 16 浮点数 数据类型 PLC 字符串

 本文摘于 西门子官网内容

一、位、位序列、整数、浮点数、日期时间

基本数据类型:包括位、位序列、整数、浮点数、日期时间。此外字符也属于基本数据类型,请参见文档 String 与 WString

此外 BCD 码虽然不属于数据类型,但也是一种数字表示方式。

1.1 位和位序列

注意:虽然位序列有数值表示方式,但一般不直接用于数学运算。通常在控制字、状态字、错误代码、标志字、状态位集合等处使用位序列。而数学运算使用下面的整数数据类型与浮点数数据类型。

数据类型位大小数值类型数值范围常数示例地址示例
Bool 1 布尔运算 FALSE 或者 TRUE TRUE
  • I1.0
  • Q0.1
  • M50.7
  • DB1.DBX2.3
  • Tag_name
二进制 2#0 或 2#1 2#0
无符号整数 0 或 1 1
八进制 8#0 或 8#1 8#1
十六进制 16#0 或 16#1 16#1
Byte 8 二进制 2#0 到 2#1111_1111 2#1000_1001
  • IB2
  • MB10
  • DB1.DBB4
  • Tag_name
无符号整数 0 到 255 15
有符号整数 -128 到 127 -63
八进制 8#0 到 8#377 8#17
十六进制 B#16#0 到 B#16#FF / 16#0 到 16#FF B#16#F、16#F
Word 16 二进制 2#0 到 2#1111_1111_1111_1111 2#1101_0010_1001_0110
  • MW10
  • DB1.DBW2
  • Tag_name
无符号整数 0 到 65535 61680
有符号整数 -32768 到 32767 72
八进制 8#0 到 8#177_777 8#170_362
十六进制 W#16#0 到 W#16#FFFF / 16#0 到 16#FFFF W#16#F1C0、16#A67B
DWord 32 二进制 2#0 到 2#1111_1111_1111_1111_1111_1111_1111_1111 2#1101_0100_1111_1110_1000_1100
  • MD10
  • DB1.DBD8
  • Tag_name
无符号整数 0 到 4_294_967_295 15_793_935
有符号整数 -2_147_483_648 到 2_147_483_647 -400000
八进制 8#0 到 8#37_777_777_777 8#74_177_417
十六进制 DW#16#0 到 DW#16#FFFF_FFFF / 16#0 到 16#FFFF_FFFF DW#16#20_F30A、16#B_01F6

1.2 整数数据类型

数据类型位大小数值范围常数示例地址示例
USInt 8 0 到 255 78、2#01001110
  • MB0
  • DB1.DBB4
  • Tag_name
SInt 8 -128 到 127 +50、16#50
UInt 16 0 到 65535 65295、0
  • MW2
  • DB1.DBW2
  • Tag_name
Int 16 -32768 到 32767 30000、+30000
UDInt 32 0 到 4_294_967_295 4042322160
  • MD6
  • DB1.DBD8
  • Tag_name
DInt 32 -2_147_483_648 到 2_147_483_647 -2131754992

1.3 浮点型实数数据类型

如 ANSI/IEEE 754-1985 标准所述,实(或浮点)数以 32 位单精度数 (Real) 或 64 位双精度数 (LReal) 表示。 单精度浮点数的精度最高为 6 位有效数字,

而双精度浮点数的精度最高为 15 位有效数字。在输入浮点常数时,最多可以指定 6 位 (Real) 或 15 位 (LReal) 有效数字来保持精度。

数据类型位大小数值范围常数示例地址示例
Real 32 -3.402823e+38 到 -1.175495e-38、±0、+1.175 495e-38 到 +3.402823e+38 123.456、-3.4、1.0e-5
  • MD100
  • DB1.DBD8
  • Tag_name
LReal 64 -1.7976931348623158e+308 到 -2.2250738585072014e-308、
±0、
+2.2250738585072014e-308 到 +1.7976931348623158e+308
12345.123456789e40、1.2E+40
  • DB_name.var_name
    注意:
    • 不支持直接寻址

1.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 小时/天)、分钟和秒。 可以选择指定小数秒格式。

数据类型位大小范围常数示例
Time 32 T#-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
DATE 16 D#1990-1-1 到 D#2168-12-31
  • D#2009-12-31
  • DATE#2009-12-31
  • 2009-12-31

TOD/
Time_of_Day

32 TOD#0:0:0.0 到 TOD#23:59:59.999
  • TOD#10:20:30.400
  • TIME_OF_DAY#10:20:30.400
  • 23:10:1

1.5 BCD 码

BCD 格式不能作为数据类型使用,但是以下转换指令支持 BCD 数字格式转换:

  • BCD16_TO_INT
  • INT_TO_BCD16
  • BCD32_TO_DINT
  • DINT_TO_BCD32

转换举例:16#100 >10#100,10#888777>16#888777

数据类型位大小范围常数示例
BCD16 16 -999 到 999 123、-123
BCD32 32 -9999999 到 9999999 1234567、-1234567

 

二、char和String

2.1 char 和 string 的定义:

 

1、数据类型为 char (Character) 的变量长度为 8 bit 位,占用1个 byte 的内存。char 数据类型将单个字符存储为 ASCII 编码形式。

通常是指计算机中使用的字母、数字和符号,包括:1、2、3、A、B、C、常见符号等。每个字符占用空间为1字节。
2、数据类型为 string 的操作数可存储多个字符,最多可包括 254 个字符。字符串中的第一个字节为总长度,第二个字节为有效字符数量。
字符串(string)在存储上类似字符的数组,所以它每一个元素都是可以提取的字符,如:"abcdefg"叫字符串,而其中的每个元素叫字符。

2.3 char 和 string 在西门子 PLC 中的格式

例如,在 PLC 中创建一个 DB 块,并将属性设置为标准 DB 块,在 DB1 块中创建如下的字符串和字符,并赋予起始值。如下图所示:

图.01

(1)string 数据类型的格式
下载到 PLC 中,通过监视表逐个查看每个字节中的值。如下图所示:

图.02

可以看出:
a.数据类型为 string 的字符串,通过查看 DB 块偏移地址可见该字符串占用256字节;查看字符串第一个字节,其最多存储字符总数量为254个。
b.数据类型为 string[10] 的字符串,通过查看 DB 块偏移地址可见该字符串占用12字节;查看字符串第一个字节,其最多存储字符数量为10个。
c.字符串的第一个字节为该字符串总长度,第二个字节为当前存储的有效字符数量。

(2)char 和16进制数的关系
在计算机领域,所有的数据都是以2进制数存储的,那么 char,16进制数和2进制数又有什么关系?
如下图所示:

图.03

可以看出:
a.通过字符 'A' 的16进制数和2进制数,可见字符(char)、16进制数只是在 PLC 中显示的形式不同,实际存储的是一个2进制值。
b.通过字符 '1' 和数值1(MB0的值)的16进制数和2进制数,可见字符 '1' 和数值1是两种不同数据。因此,实际使用是必须注意区别。
c.下图是 ASCII 字符(char):'0','1',……'E','F' 对应的2进制,10进制,16进制对应关系的截图。

图.04

更多的 ASCII 字符对应关系,请查看下面的链接。
ASCII 码表链接:ASCII

ASCII码表 0-127

 

Bin Dec Hex 缩写/字符 解释
00000000 0 00 NUL(null) 空字符
00000001 1 01 SOH(start of headling) 标题开始
00000010 2 02 STX (start of text) 正文开始
00000011 3 03 ETX (end of text) 正文结束
00000100 4 04 EOT (end of transmission) 传输结束
00000101 5 05 ENQ (enquiry) 请求
00000110 6 06 ACK (acknowledge) 收到通知
00000111 7 07 BEL (bell) 响铃
00001000 8 08 BS (backspace) 退格
00001001 9 09 HT (horizontal tab) 水平制表符
00001010 10 0A LF (NL line feed, new line) 换行键
00001011 11 0B VT (vertical tab) 垂直制表符
00001100 12 0C FF (NP form feed, new page) 换页键
00001101 13 0D CR (carriage return) 回车键
00001110 14 0E SO (shift out) 不用切换
00001111 15 0F SI (shift in) 启用切换
00010000 16 10 DLE (data link escape) 数据链路转义
00010001 17 11 DC1 (device control 1) 设备控制1
00010010 18 12 DC2 (device control 2) 设备控制2
00010011 19 13 DC3 (device control 3) 设备控制3
00010100 20 14 DC4 (device control 4) 设备控制4
00010101 21 15 NAK (negative acknowledge) 拒绝接收
00010110 22 16 SYN (synchronous idle) 同步空闲
00010111 23 17 ETB (end of trans. block) 传输块结束
00011000 24 18 CAN (cancel) 取消
00011001 25 19 EM (end of medium) 介质中断
00011010 26 1A SUB (substitute) 替补
00011011 27 1B ESC (escape) 溢出
00011100 28 1C FS (file separator) 文件分割符
00011101 29 1D GS (group separator) 分组符
00011110 30 1E RS (record separator) 记录分离符
00011111 31 1F US (unit separator) 单元分隔符
00100000 32 20 (space) 空格
00100001 33 21 !  
00100010 34 22 "  
00100011 35 23 #  
00100100 36 24 $  
00100101 37 25 %  
00100110 38 26 &  
00100111 39 27 '  
00101000 40 28 (  
00101001 41 29 )  
00101010 42 2A *  
00101011 43 2B +  
00101100 44 2C ,  
00101101 45 2D -  
00101110 46 2E .  
00101111 47 2F /  
00110000 48 30 0  
00110001 49 31 1  
00110010 50 32 2  
00110011 51 33 3  
00110100 52 34 4  
00110101 53 35 5  
00110110 54 36 6  
00110111 55 37 7  
00111000 56 38 8  
00111001 57 39 9  
00111010 58 3A :  
00111011 59 3B ;  
00111100 60 3C <  
00111101 61 3D =  
00111110 62 3E >  
00111111 63 3F ?  
01000000 64 40 @  
01000001 65 41 A  
01000010 66 42 B  
01000011 67 43 C  
01000100 68 44 D  
01000101 69 45 E  
01000110 70 46 F  
01000111 71 47 G  
01001000 72 48 H  
01001001 73 49 I  
01001010 74 4A J  
01001011 75 4B K  
01001100 76 4C L  
01001101 77 4D M  
01001110 78 4E N  
01001111 79 4F O  
01010000 80 50 P  
01010001 81 51 Q  
01010010 82 52 R  
01010011 83 53 S  
01010100 84 54 T  
01010101 85 55 U  
01010110 86 56 V  
01010111 87 57 W  
01011000 88 58 X  
01011001 89 59 Y  
01011010 90 5A Z  
01011011 91 5B [  
01011100 92 5C \  
01011101 93 5D ]  
01011110 94 5E ^  
01011111 95 5F _  
01100000 96 60 `  
01100001 97 61 a  
01100010 98 62 b  
01100011 99 63 c  
01100100 100 64 d  
01100101 101 65 e  
01100110 102 66 f  
01100111 103 67 g  
01101000 104 68 h  
01101001 105 69 i  
01101010 106 6A j  
01101011 107 6B k  
01101100 108 6C l  
01101101 109 6D m  
01101110 110 6E n  
01101111 111 6F o  
01110000 112 70 p  
01110001 113 71 q  
01110010 114 72 r  
01110011 115 73 s  
01110100 116 74 t  
01110101 117 75 u  
01110110 118 76 v  
01110111 119 77 w  
01111000 120 78 x  
01111001 121 79 y  
01111010 122 7A z  
01111011 123 7B {  
01111100 124 7C |  
01111101 125 7D }  
01111110 126 7E ~  
01111111 127 7F DEL (delete) 删除

 

2.3 使用 string 数据类型在 HMI 上显示汉字

例如,在某些不支持 WString 数据类型(关于 WString 参见:跳转链接)的 HMI 设备上显示汉字,也是可以使用 string 数据类型显示的。
但由于 string 数据类型中存储的汉字编码标准为 GBK 编码;因此,需要在 HMI 设备上选择相应的编码标准。
如下图所示,在 string 数据类型的起始值中定义汉字 '你好',且字符背景底色为浅黄色(编译时会有警告信息,这是TIA软件建议 string 数据类型中不使用汉字的友情提示),但不影响使用。

图.05

在线监控时发现汉字无法按 Unicode 编码方式正确显示,设置显示格式为16进制数,通过下图所示的字符编码对应关系,发现其对应的是 GBK 编码。如下图所示:

图.06

所以,在 HMI 设备上显示 string 数据类型中存储的汉字时,需要在 HMI 上设置对应的 GBK 编码方式,是可以显示汉字的。

关于16进制数和 GBK 编码对应关系,可以通过如下网址查询:GBK

2.4 常问问题:

1、HTA 和 ATH 指令的输入和输出使用限制?
通过 TIA 软件的在线帮助,查看指令功能说明:
指令 HTA 功能——输入范围为16进制数:16#0,1,……E,F,输出范围为由 ASCII 字符(char):'0','1',……'E','F' 组成的数组或字符串 。
指令 ATH 功能——输入范围为由 ASCII 字符(char):'0','1',……'E','F' 组成的数组或字符串,输出范围为16进制数:16#0,1,……E,F 。
注意:指令 ATH 和指令 HTA 的输入和输出都是受到限制的。

 

2、HTA 和 ATH 指令的作用?
在具体的应用中需要互相转换字符('0','1',……'E','F')和16进制数值(16#0,1,……E,F),那么HTA和ATH就为转换这两种类型的数据提供了方便。
以 HTA 指令为例,在 OB1 中调用 HTA 指令,实现如下要求的转换:
a.W#16#12AB需要转换为 ASCII 字符数组,使用 HTA 指令转换结果为 CHAR#['1','2','A','B']。
b.W#16#12AB需要转换为 ASCII 字符串,使用 HTA 指令转换结果为 '12AB' 。
如下图所示:

图.07

结果:使用 HTA 指令转换后,数据类型及占用字节空间发生了变化;同样的,使用 ATH 指令可以做反向转换,这里不再举例说明。

 

3、字符串存储的 'abcdef',通过赋值更新为了 'DCBA',为何查看字符存储单元时,字符 'e' 和 'f' 还能监视到?该如何处理?
简单测试程序,如下图所示:

图.08

当M0.0触发之后,再触发M0.2,结果如下图所示:

图.09

例子中,6字符的字符串更新为4字符的字符串,原字符串的后2个字符没有更新;倘若这10个字符的字符串需要通过串口或 TCP 通信完整(字符串总长12字节)的发送到通信伙伴,那么在字符串信息更新后的发送信息中将包含这两个不需要发送的字符。
结果:字符串更新时,仅更新有效字符数量的部分。
建议处理方法:更新字符串之前,先清空该字符串中所有字符。

4、如何输入特殊字符(如:回车,换行,$ 等)?
例如,需要输入的字符串为 '$ABCD$+回车+换行',可以参考如下表格:

图.10

根据表格说明,字符串在 PLC 中的书写格式:'$$ABCD$$$R$L' 或 '$$ABCD$$$N',如下图所示:

图.11

 

 

三、Wstring

3.1 wchar 和 wstring 的定义:

1、数据类型为 wchar(宽字符)的变量长度为 16 位,占用2个 byte 的内存。 wchar 数据类型将扩展字符集中的单个字符保存为 UFT-16 编码形式。
2、数据类型为 wstring (宽字符串)的操作数用于在一个字符串中存储多个数据类型为 wchar 的 Unicode 字符。如果未指定长度,则字符串的长度为预置的 254 个字。

Unicode 是国际标准字符集,可译为万国码或统一码等,包含中日韩越汉字和世界上绝大多数语言文字。
如需了解 Unicode 码,请查看下面链接:Unicode码

3.2 wchar 和 wstring 在西门子 PLC 中的格式

本节以汉字为例说明汉字在西门子 PLC 中的格式。
例如,在 PLC 中创建一个 DB 块,并将属性设置为标准 DB 块,在 DB1 块中创建如下的汉字字符串和汉字字符,并赋予起始值。如下图所示:

图.01

1、wstring 数据类型的格式
下载到 PLC 中,通过监视表逐个查看每个字中的值。如下图所示:

图.02

可以看出:
a.数据类型为 wstring 的汉字字符串,通过查看 DB 块偏移地址可见该字符串占用254字;查看字符串第一个字,其最多存储汉字字符总数量为254个。
b.数据类型为 wstring[10] 的汉字字符串,通过查看 DB 块偏移地址可见该字符串占用12字;查看字符串第一个字,其最多存储汉字字符数量为10个。
c.汉字字符串的第一个字为该字符串总长度,第二个字为当前存储的有效字符数量。

2、wchar 和16进制数的关系
在计算机领域,所有的数据都是以2进制数存储的,那么 wchar,16进制数和2进制数又有什么关系?
如下图所示:

图.03

可以看出:
a.通过汉字字符 '好' 的16进制数和2进制数,可见字符(wchar)、16进制数只是在PLC中显示的形式不同,实际存储的是一个2进制值。
通过下面的网页,可以查看汉字和16进制数的对应关系。
unicode 转中文,中文转 unicode,链接:Unicode码
b.通过汉字字符 '1' 的16进制数和2进制数,可见汉字字符(wchar)'1' 显示的16进制数为16#0031,而字符(char)'1' 对应的16进制数为16#31。因此,如果使用 wchar 存储仅占一个字节的 char 字符时,则高八位为16#00,低八位是相同的,都是2进制的2#0011_0001。

3.3 常问问题:

1、定义为 wstring 的字符串,是否能保存数字和英文字母的字符?
可以。
例如,wchar#'A',实际存储时,对应的16进制数为16#0041,wchar#'1',实际存储时,对应的16进制数为16#0031。
如下图所示:

图.04

也就是说,使用 wchar 存储仅占一个字节的英文字母或数字时,对应 wchar 的字的高八位将为16#00。

2、如何输入特殊字符(如:回车,换行,$ 等)?
例如,需要输入的汉字字符串为 '$早上好$+回车+换行',可以参考如下表格:

图.05

根据表格说明,字符串在 PLC 中的书写格式:'$$早上好$$$R$L'或'$$早上好$$$N',如下图所示:

图.06

 

标签:字符,存储,进制,16,浮点数,数据类型,PLC,字符串
From: https://www.cnblogs.com/yulia/p/18138202

相关文章

  • 什么是可散列(hashable)的数据类型
    在Python官方词汇表中,关于hashable类型的定义有这样一段话:Anobjectishashableifithasahashvaluewhichneverchangesduringitslifetime(itneedsahash()method),andcanbecomparedtootherobjects(itneedsaneq()method).Hashableobjectswhichcompa......
  • day01-03_我的Java学习笔记(Java基础语法--注释、字面量、变量、二进制、ASCII编码、
    1.Java基础语法1.1注释1.2字面量(Python中叫数据类型)1.3变量1.3.1变量的定义及使用1.3.2变量使用注意事项1.4数据的存储形式:二进制字节、字、bit、byte的关系:字word字节byte位bit,来自英文bit,音译为“比特”,表示二进制位。字长是指字的......
  • PLC报警消息处理
    在TIAProtal中,大致有以下几种方式可以获取报警信息:HMI侧组态报警Program_alarmProdiag第一种方式基本上是最常用和最简单的,基本步骤是先创建报警变量再组态报警文本,由HMI定时去轮询变量,通过监控变量值的变化触发。优点是配置简单,但是效率比较低,工作量比较大(以前项目上我会新......
  • COMP 2049 浮点数与简单算术表达式
    COMP2049语言与计算课程:浮点数与简单算术表达式1浮点数字设计一个右线性语法G1,根据以下规则生成二进制浮点文字的语言:每个数字可以是有符号的,也可以是无符号的。–在1.01中无符号,在+1.01或-1.10中有符号数字部分(也称为值字段)必须非空,并且可以选择包含小数点“.”,在这种情况下,它后......
  • day 06-2 数据类型(列表)
    1.3公共功能1.相加,两个列表相加获取一个新的列表data=["张译","冯绍峰"]+["赵又廷","林更新"]print(data)#['张译','冯绍峰','赵又廷','林更新']v1=["赵又廷","林更新"]v2=["张译","冯......
  • day 06-3 数据类型(列表)
    1.6阶段作业1.写代码,有如下列表,按照要求实现每一个功能li=["linzai",'asff','wftthyy','kihfng',"张三四"]#计算列表的长度并输出data=len(li)#print(len(li))print(data)#5#列表中追加元素"seven"#列表中追加元素"seven",并输出添......
  • C语言10-指针(多级指针、空指针、野指针),自定义数据类型(枚举enum、结构体struct)
    第12章指针pointer12.6多级指针指向指针的指针称为多级指针eg:int*ptr1=&num; int**ptr2=&ptr1; int***ptr3=&ptr2;12.7空指针应用场景:1.暂时不确定指向的指针,可以在定义的时候先赋值为NULL2.有些指针函数,如果内部出现异常无法成功实现功能,可以返回NUL......
  • 4.数据类型
    lua有8中数据类型(使用type()函数可以查看变量数据类型)nil:表示一个无效值,相当于c中NULLboolean:两个值true,false(想当与c中bool)number:双精度类型的实浮点string:字符串(形式:str="我是字符串,我不能跨行"或者str='我是字符串,我不能跨行'或者str=[[......
  • java_基础01_数据类型和变量
     1.注释//单行注释/*多行注释*//**javaDoc:文档注释/***@Descriptionhello*//***_ooOoo_*o8888888o*88"."88*......
  • python八大数据类型及方法
    【1】学习变量的目的学习变量有助于我们在程序中存储和操作数据,提高代码的灵活性和可维护性。通过使用变量,我们可以方便地引用和修改数据,使得程序能够动态地响应不同的输入和条件。【2】学习基本数据类型的目的学习基本数据类型有助于我们理解不同类型的数据在计算机中的表......