9
用户在编写程序时,变量的格式必须与指令的数据类型相匹配。S7系列plc的数据类型主要分为基本数据类型、复合数据类型和参数类型,对于S7 - 1500 PLC,还包括系统数据类型和硬件数据类型。
基本数据类型的操作数通常是32位以内的数据。基本数据类型分为位数据类型、数学数据类型、字符数据类型、定时器数据类型以及日期和时间数据类型。在日期和时间数据类型中,存在**过32位的数据类型;对于S7 - 1500 PLC而言,还增加了许多**过32位的此类数据类型。为方便比较学习,故一并放在基本数据类型中进行介绍。
位数据类型主要有布尔型( Bool)、字节型(Byte)、字型(Word)和双字型( DWord),对于S7 -1500 PLC,还支持长字型(LWord),而S7 - 300/400 PLC仅支持前4种。
在位数据类型中,只表示存储器中各位的状态是0 (FALSE)还是1(TURE)。其长度可以是一位( Bit)、一个字节(Byte,8位)、一个字(Word,16位)、一个双字(Double Word,32位)或一个长字(Long Word,64位),分别对应Bool、Byte、Word、DWord和LWord类型。位数据类型通常用二进制或十六进制格式赋值,如2# 01010101、16# 283C等。需注意的是,一位布尔型数据类型不能直接赋常数值。
位数据类型的常数表示需要在数据之前根据存储单元长度( Byte、Word、DWord、LWord)加上B#、W#、DW#或LW#(Bool型除外),所能表示的数据范围见表1。
表1 位数据类型的数据表示范围
位数据类型的数据表示范围
位数据类型的数据表示范围
对于S7 - 1500 PLC,数学数据类型主要有整数类型和实数类型(浮点数类型)。
整数类型又分为有符号整数类型和无符号整数类型。有符号整数类型包括短整数型( SInt)、整数型(Int)、双整数型(DInt)和长整数型(Llnt);无符号整数类型包括无符号短整数型( USInt)、无符号整数型(UInt)、无符号双整数型(UDInt)和无符号长整数型( ULInt)。对于S7 - 300/400 PLC,仅支持整数型Int和双整数型DInt。
短整数型、整数型、双整数型和长整数型数据为有符号整数,分别为8位、16位、32位和64位,在存储器中用二进制补码表示,较高位为符号位(0表示正数、1表示负数),其余各位为数值位。而无符号短整数型、无符号整数型、无符号双整数型和无符号长整数型数据均为无符号整数,每一位均为有效数值。
实数类型具体包括实数型( Real)和长实数型(LReal),均为有符号的浮点数,分别占用32位和64位,较高位为符号位(0表示正数、1表示负数),接下来的8位(或11位)为指数位,剩余位为尾数位,共同构成实数数值。实数的特点是利用有限的32位或64位可以表示一个很大的数,也可以表示一个很小的数。对于S7 - 300/400 PLC,仅支持实数型Real。
原有的字符数据类型( Char)长度为8 bit,操作数在存储器中占一个字节,以ASCII码格式存储单个字符。常量表示时使用单引号,例如常量字符A表示为‘A’或CHAR#′A′。表2列出了Char数据类型的属性。
表2 Char数据类型的属性
长度/bit 格 式 取值范围 输入值示例
8 ASCII字符 ASCII字符集 'A ',CHAR#′A′
长度/bit
格 式
取值范围
输入值示例
8
ASCII字符
ASCII字符集
'A ',CHAR#′A′
对于S7 - 1500 PLC,还支持宽字符类型(WChar),其操作数长度为16 bit,即在存储器中占用2B,以Unicode格式存储扩展字符集中的单个字符。但只涉及整个Unicode范围的一部分。常量表示时需要加WCHAR#前缀及单引号,例如常量字符a表示为WCHAR#‘a’。控制字符在输入时,以美元符号表示。表3列出了WChar数据类型的属性。
表3 WChar数据类型的属性
长度/bit 格 式 取值范围 输入值示例
16 Unicode字符 $0000~$D7FF WCHAR#'A', WCHAR#'$0041'
长度/bit
格 式
取值范围
输入值示例
16
Unicode字符
$0000~$D7FF
WCHAR#'A', WCHAR#'$0041'
定时器数据类型主要包括时间( Time)和S5时间(S5Time)数据类型。与S7 - 300/400 PLC相比,S7 - 1500 PLC还支持长时间(LTime)数据类型。
时间( Time)数据类型为32位的IEC定时器类型,内容用毫秒(ms)为单位的双整数表示,可以是正数或负数,表示信息包括天(d)、小时(h)、分钟(m)、秒(s)和毫秒( ms)。表4列出了Time数据类型的属性。
表4 Time数据类型的属性
Time数据类型的属性
Time数据类型的属性
S5时间(S5 Time)数据类型变量为16 bit,其中较高两位未用,接下来的两位为时基信息(00表示0. 01 s,01表示0.1 s,10表示1s,11表示10 s),剩余12位为BCD码格式的时间常数,其范围为0~ 999,如图1所示。该格式所表示的时间为时间常数与时基的乘积。S5 Time的常数格式为时间之前加S5T#,例如S5T#16sl00 ms,以时基0.1 s表示的时间常数为161,故对应的变量内容为2#0001 0001 0110 0001。
表5 列出了S5 Time数据类型的取值范围等属性。
表5 S5Time数据类型的属性
S5Time数据类型的属性
S5Time数据类型的属性
S5 Time时间格式
S5 Time时间格式
图1 S5 Time时间格式
长时间( LTime)数据类型为64位IEC定时器类型,操作数内容以纳秒(ns)为单位的长整数表示,可以是正数或负数。表示信息包括天(d)、小时(h)、分钟(m)、秒(s)、毫秒( ms)、微秒(μS)和纳秒(ns)。常数表示格式为时间前加LT#,如LT#11ns。表6列出了LTime数据类型的属性。
间接寻址方法,本文提到的主要是西门子S7-300plc.
1.区域内间接寻址
指针的较高位(*31位)x为0时为区域内的间接寻址,此时区域标示号rrr也为0,地址指针的格式与存储器间接寻址的相同。下面是区域内间接寻址的例子:
L P#5.0 //将间接寻址的指针装入累加器1
LAR1 //将累加器1的内容送AR1
A M[AR1, P#2.3] //AR1中的P#5.0加偏移量P#2.3,对M7.3进行操作
= Q[AR1, P#0.2] //逻辑运算的结果送Q5.2,P#5.0+P#0.2=P#5.2
L MW[AR1, P#19.0] //将MW24装入累加器1
方括号内为操作数的地址,它等于AR1中的地址值P#5.0加上逗号后面的地址偏移量,例如*3条指令中操作数的地址为P#5.0+P#2.3=P#7.3,即操作数为M7.3。
2.区域之间的间接寻址
指针的较高位(*31位)x = 1时为区域间的间接寻址,下面是区域间的间接寻址的例子:
L P#M 6.0 //将M6.0的双字地址装入累加器1
LAR1 //将累加器1的内容送到AR1
L W [AR1,P#20.0] //将MW26的内容传送到累加器1
P#M6.0对应的二进制数为2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0已经包含有区域信息(rrr=2#011表示M区),*3条指令“L W[AR1, P#50.0]”没有必要再使用地址标识符M。
用地址指针读写字、字节或双字时,指针中小数点右边的位编号必须为0,否则将会出错。
上的状态指示灯在大家调试维修的时候可以帮助我们更快的了解问题之所在,因此,明白
西门子plc
的状态指示灯的含义,在PLC维修中就显得十分重要了。在此高工就先为大家讲下西门子各系列指示灯的含义,希望对大家使用调试维修PLC的有一些帮助。
S7-200CPU:
SF 系统状态灯 用作系统出错/故障显示,为红色,例如内部错误,用户程序错误(看门狗错误,间接寻址,非法的浮点数,地址范围错等)
RUN 运行指示灯 绿色,运行模式。
S** 停业运行灯 黄色,停止模式。
S7-300CPU:SF指示灯 用作系统出错/故障显示,为红色,CPU的硬件出现故障或软件有错,带诊断功能模块出错时点亮。BATF 为电池故障,红色,电池电压低或没有电池时点亮。DC5V +5V电源指示,绿色,CPU和S7300总线的5V电源正常时点亮。FRCE 强制,黄色,至少有一个I/O被强制时点亮。RUN 运行方式,绿色,CPU处于RUN状态时点亮,重新启动时以2Hz的频率闪亮,保持HOLD状态时以0.5Hz的频率闪亮。** 停止方式,黄色,CPU处于S**、HOLD状态时或重新启动时常亮,请求存储器复位时以0.5Hz的频率闪亮,正在执行存储器复位时以2Hz的频率闪亮,由于存储器卡插入需要存储器复位时以0.5Hz的频率闪亮。BUSF 总线错误,红色,PROFIBUS-DP接口硬件或软件故障时点亮,集成有DP口的CPU才有此LED,(如CPU 315-2DP),集成有2个DP口的CPU有两个LED(BUS1F和BUS2F)。
S7-300CPU:SF指示灯 用作系统出错/故障显示,为红色,CPU的硬件出现故障或软件有错,带诊断功能模块出错时点亮。BATF 为电池故障,红色,电池电压低或没有电池时点亮。DC5V +5V电源指示,绿色,CPU和S7300总线的5V电源正常时点亮。FRCE 强制,黄色,至少有一个I/O被强制时点亮。RUN 运行方式,绿色,CPU处于RUN状态时点亮,重新启动时以2Hz的频率闪亮,保持HOLD状态时以0.5Hz的频率闪亮。** 停止方式,黄色,CPU处于S**、HOLD状态时或重新启动时常亮,请求存储器复位时以0.5Hz的频率闪亮,正在执行存储器复位时以2Hz的频率闪亮,由于存储器卡插入需要存储器复位时以0.5Hz的频率闪亮。BUSF 总线错误,红色,PROFIBUS-DP接口硬件或软件故障时点亮,集成有DP口的CPU才有此LED,(如CPU 315-2DP),集成有2个DP口的CPU有两个LED(BUS1F和BUS2F)。
S7-300CPU:
SF指示灯 用作系统出错/故障显示,为红色,CPU的硬件出现故障或软件有错,带诊断功能模块出错时点亮。
BATF 为电池故障,红色,电池电压低或没有电池时点亮。
DC5V +5V
电源
指示,绿色,CPU和S7300总线的5V电源正常时点亮。
FRCE 强制,黄色,至少有一个I/O被强制时点亮。
RUN 运行方式,绿色,CPU处于RUN状态时点亮,重新启动时以2Hz的频率闪亮,保持HOLD状态时以0.5Hz的频率闪亮。
** 停止方式,黄色,CPU处于S**、HOLD状态时或重新启动时常亮,请求存储器复位时以0.5Hz的频率闪亮,正在执行存储器复位时以2Hz的频率闪亮,由于存储器卡插入需要存储器复位时以0.5Hz的频率闪亮。
BUSF 总线错误,红色,PROFIBUS-DP接口硬件或软件故障时点亮,集成有DP口的CPU才有此LED,(如CPU 315-2DP),集成有2个DP口的CPU有两个LED(BUS1F和BUS2F)。
S7-400CPU:INTF 红色,内部故障,例如用户程序运行**时,用户程序错误。EXTF 红色,外部故障,例如电源故障,I/O模板故障。FRCE 黄色,至少有一个I/O被强制时点亮。RUN 绿色,运行模式。S** 黄色,停止模式。
BUS1F 红色,MPI/PROFIBUS-DP接口1的总线故障。BUS2F 红色,MPI/PROFIBUS-DP接口2的总线故障。MSTR 黄色,CPU运行。REDF 红色,冗余错误。RACK0 黄色,CPU在机架0中。RACK1 黄色,CPU在机架1中。IFM1F 红色,接口子模块1故障。IFM2F 红色,接口子模块2故障。好吧,关于PLC维修,这一节我们就先讲到这,后续的内容欢迎大家继续关注电工学习网。
BUS1F 红色,MPI/PROFIBUS-DP接口1的总线故障。BUS2F 红色,MPI/PROFIBUS-DP接口2的总线故障。MSTR 黄色,CPU运行。REDF 红色,冗余错误。RACK0 黄色,CPU在机架0中。RACK1 黄色,CPU在机架1中。IFM1F 红色,接口子模块1故障。IFM2F 红色,接口子模块2故障。好吧,关于PLC维修,这一节我们就先讲到这,后续的内容欢迎大家继续关注电工学习网。
BUS1F 红色,MPI/PROFIBUS-DP接口1的总线故障。
BUS2F 红色,MPI/PROFIBUS-DP接口2的总线故障。
MSTR 黄色,CPU运行。
REDF 红色,冗余错误。
RACK0 黄色,CPU在机架0中。
RACK1 黄色,CPU在机架1中。
IFM1F 红色,接口子模块1故障。
IFM2F 红色,接口子模块2故障。
作Modbus主站,Modbus地址和PLC手册里的地址一与PLC作从站,PLC不用管什么Modbus地址。
Modbus地址实际上分为两种情况。下面以西门子S7-200/S7-200SMART为例来说明:
*一种情况:PLC作Modbus主站,Modbus地址和PLC手册里的地址一致,例如作主站的S7-200的MBUS_MSG指令用于向Modbus从站发送请求消息,和处理从站返回的响应消息。要读取从站(另一台S7-200)的I0.0开始的地址区时,它的输入参数Addr(Modbus地址)为10001。S7-200从站保持寄存器的V区起始地址为VB200时,要读取从站VW200开始的V存储区时,保持寄存器的地址是40001。
*二种情况:PLC作从站,PLC不用管什么Modbus地址,等着主站来读写它的地址区就是了。
主站的计算机软件(例如
dcs
或组态软件)的编程人员需要编写实现Modbus通信的程序,首先需要确定ModbusRTU的报文结构。他们一般不熟悉PLC,因此PLC的编程人员往往需要和上位机软件的编程人员一起来讨论Modbus的报文结构。
较*出问题的就是报文里Modbus地址与PLC存储区地址的对应关系。曾经有工作人员做过的一个系统的上位机是专用的组态软件,通过分析GEPLC手册给出的CRC的循环异或计算实例每一步的中间数据,编写出了CRC计算的C语言程序。通过实验验证了Modbus报文结构和CRC的计算的可行性。
S7 PLC手册给出的Modbus地址与Modicon公司和GE公司PLC使用的地址相同,是基于1的地址,即同类元件的首地址为1。而
西门子plc
采用的是基于0的地址,即同类元件的首地址为0。Modbus报文中西门子PLC的Modbus地址也采用基于0的地址。
PLC系统手册中的Modbus地址的较高位用来表示地址区的类型,例如I0.0的Modbus地址为10001。因为地址区类型的信息已经包含在报文的功能码中了,报文中S7-200的I0.0的Modbus地址不是10001,而是0。报文中其他地址区的Modbus地址也应按相同的原则处理。例如当S7-200从站保持寄存器的V区起始地址为VB200时,VW200对应的保持寄存器在报文中的Modbus地址为0,而不是40001。