基本数据类型共包含12种,每一个数据类型都具备关键字、数据长度、取值范围和常数表达格式等属性。以字符型数据为例,该类型的关键字是Char,数据长度8bit,取值范围是ASCII字符集,常数表达格式为两个单引号包含的字符,如‘A’。STEP7基本数据类型的关键字、长度、取值范围和以常数为例子的表示方法见表5-1。
表5-1 STEP7的基本数据类型
(续)
下面简单介绍不同数据类型数据的表示方法:
(1)WORD(字)
一个WORD包含16个位,以二进制编码表示一个数值时,将16个位分为4个组,每个组4个位,组合表示数值中的一个数字或符号位,例如以十六进制表示数值W#16#1234的方法如图5-1所示,使用十六进制表示数值时没有符号位,所以十六进制表示的数值不可能有负值。
图5-1 一个WORD数据类型的十六进制表示方法
以BCD码表示+123方法如图5-2所示,BCD码通常表示时间格式数值,与十六进制表示方法相比较,BCD码带有符号位,数值中不能含有A、B、C、D、E、F等十六进制数字。计数器C同样使用BCD码表示,但是不识别符号位,例如+123和-123表示计数器的值相同,都是C#123。
图5-2 一个WORD数据类型的BCD码表示方法
DWORD与WORD的表示方法相同。
(2)INT(整数)
一个INT包含16个位,在存储器中占用一个字的空间。第16位为符号位,可以表示数值的正负。以二进制编码表示一个数值时,除符号位以外将每一位信号的数值相加即可以表示一个整数,例如以整数方式表示+34的位图排列如图5-3所示。
图5-3 一个INT数据类型的正整数表示方法
一个负数的位表示方法则是在正数的基础上将所有位信号取反后加1,如-34的表示方法如图5-4所示。
图5-4 一个INT数据类型的负整数表示方法
DINT与INT的表示方法相同。
(3)REAL(浮点数)
一个REAL包含32个位,在存储器中占用两个字的空间。STEP7中的REAL数据类型符合“IEEE standard754-1985”标准,一个REAL数值包括符号位S、指数e和尾数m,分别占用的位数如图5-5所示。指数e和尾数m的取值见表5-2。
图5-5 一个REAL数据类型的表示方法
表5-2 指数e和尾数m的取值
(www.xing528.com)
REAL数据类型的值等于1.m×2(e-bias),其中
e:1≤e≤254
bias:bias=127
S:S=0值为正,S=1值为负。
例如浮点值12.25的表示方法为:
符号位S=0;
指数e=27+21=128+2=130;
尾数m=2-1+2-5=0.5+0.03125=0.53125
浮点数值=(1+0.53125)×2(130-127)=1.53125×8=12.25
西门子公司的PLC规定浮点值的小数部分最多为6位数,如果相差大于等于107的两个浮点数进行运算,可能导致不正确的结果,例如100000000.0+1.0=100000000.0,因为值1.0在前者中无法表示(最小数值分辨率)。为了增加浮点运算的准确性,在程序中避免相差大于107的两个浮点值进行加减运算。
(4)S5Time(SIMATIC时间)
S7系列PLC中的定时器使用S5 TIME的数据类型,格式为S5T#XH_XM_XS_XMS,其中H表示为小时;M表示为分钟;S表示为秒;MS表示为毫秒。时间数据以BCD码二进制编码的格式存储于16个位中,例如时基为1s(时间最小变化率为1s),时间值为127s的位图表示方法如图5-6所示。
图5-6 一个S5 TIME数据类型的表示方法
时基为时间的最小变化率,时基的几种方式见表5-3。
表5-3 S5 TIME数据格式的时基
同样一个定时器,BCD码的时间值最大为999,通过选择不同的时基可以改变定时器的定时长度,10ms时基的最大定时长度为9990ms,100ms时基的最大定时长度为99900ms,1s时基的最大定时长度为999s,10s时基的最大定时长度为9990s,所以定时器最大的定时长度为9990s(2H_46M_30S),但是最小分辨率将变为10s。在编写用户程序时可以直接装载设定的时间值,CPU根据时间值大小自动选择时基值,例如在程序中设定时间值为S5T#2M_30S,等于150s,大于100ms时基最大的定时长度而小于1s时基最大的定时长度,时基自动选择为1s;如果选择时间值为一个变量,则需要对时基值进行赋值,例如使用不支持SIMATIC S5 TIME数据格式的第三方HMI监控软件设定时间值时,需要设定时基值(西门子公司的WinCC软件支持SIMATIC S5 TIME数据格式,不需要选择)。
(5)TIME(IEC时间)
TIME(IEC时间)采用IEC标准的时间格式,占用32个位,格式为:T#XD_XH_XM_XS_XMS,其中D表示为天;H表示为小时;M表示为分钟;S表示为秒;MS表示为毫秒。在规定的取值范围内,TIME(IEC时间)类型数据可以与DINT类型的数据相互转换(T#0ms对应L#0),DINT数据每增加1,时间值增加1ms。与SIMATIC S5 TIME相比,没有时基,定时时间更长,但是每一个IEC时间定时器需要占用CPU的存储区。
(6)DATE(IEC日期)
DATE(IEC日期)采用IEC标准的日期格式,占用16个位,例如2006年8月12日的表示格式为:D#2006-08-12,按年-月-日排序。在规定的取值范围内,DATE(IEC日期)类型数据可以与INT类型的数据相互转换(D#1990-01-01对应0),INT数据每增加1,日期值增加1天。
(7)Time_OF_DAY
Time_OF_DAY(时间),占用32个位,例如10h11min58s312ms的表示格式为:TOD#10∶11∶58.312,按时∶分∶秒∶毫秒排序。在规定的取值范围内,Time_OF_DAY(时间)类型数据可以与DINT类型的数据相互转换(TOD#00∶00∶00.000对应0),DINT数据每增加1,时间值增加1ms。
注意:
上述介绍的为S7 CPU的数据类型,如果与第三方数据通信,需要注意数据类型的构成,如一些串口设备自定义浮点数据类型,与S7 CPU的数据类型不匹配,需要用户编程转换。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。