西门子6SL3210-1PE23-8UL0
西门子功率模块6SL3210-1PE23-8UL0
6SL3210-1PE23-8UL0
西门子MM4系列变频器都集成了串行接口,支持USS通信协议,通过USS协议可以对变频器进行控制和读写变频器参数。使用S7-300PLC有以下两种通讯方案:
1. 按照USS协议要求编写通讯报文,计算BCC校验,适用于从站数量比较少,较简单的应用;
2. 采用DriveES SIMATIC软件提供的S7-300库程序,自动生成从站轮询表程序,适用于从站数量比较多,较复杂的应用。
本文主要介绍通过**种方案实现CPU314-2PtP与MM440的USS通讯。使用S7-300编写USS通讯程序分为以下几个步骤:
1. 依据USS协议编写报文;
2. 使用S7-300提供的串口数据发送程序发送USS报文;
3. 使用S7-300提供的串口数据接收程序接收USS报文;
4. 依据USS协议分析接收到的报文。
本文根据这4个步骤编写了如下内容:*1节简单介绍USS协议内容,了解USS协议报文格式;*2节根据USS协议列举了4条报文;*3节介绍PLC和变频器USS通讯的硬件组态;*4节介绍通过调用PLC中的发送和接收功能块实现USS协议报文的发送和接收。
1 USS协议介绍
USS协议是西门子专为驱动装置开发的通信协议。USS的工作机制是,通信是由主站发起,USS主站不断循环轮询各个从站,从站根据收到的指令,决定是否响应主站。从站不会主动发送数据。从站在以下条件满足时应答主站:接收到主站报文没有错误,并且本从站在接收到主站的报文中被寻址,上述条件不满足或者主站发出的是广播报文,从站不会做任何响应。USS的字符传输格式为11位,其中1位起始位、8位数据位、1偶校验、1位停止位。如下表所示:
起始位 | 数据位 | 校验位 | 停止位 | |||||||
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 偶X1 | 1 |
LSB | MSB |
USS字符帧结构
USS协议的报文由一连串的字符组成,协议中定义了它们的功能,如下表所示:
STX | LGE | ADR | 有效据区 | BCC | ||||
1 | 2 | 3 | … | n |
USS报文结构
? STX:长度1个字节,总是为02(Hex),表示一条信息的开始;
? LGE:长度1个字节,表明在LGE后字节的数量,上表中黄色区域长度;
? ADR:长度1个字节,表明从站地址;
? BCC:长度1个字节,异或校验和,USS报文中BCC前面所有字节异或运算的结果;
? 有效数据区:由PKW区和PZD区组成,如下表所示。
PKW区 | PZD区 | ||||||||
PKE | IND | PWE1 | PWE2 | … | PWEm | PZD1 | PZD2 | PZD1 | PZDn |
USS有效数据区
PKW区用于主站读写从站变频器参数:
? PKE:长度一个字,结构如下表,任务或应答ID请参考《MM440使用大全》*13章。
Bit15- Bit 12 Bit 11 Bit 10-Bit 0
Bit15- Bit 12 | Bit 11 | Bit 10-Bit 0 |
任务或应答ID | 0 | 基本参数号PNU |
PKW结构
变频器参数号<2000时,基本参数号PNU=变频器参数号,例如P700的基本参数号PNU=2BC(Hex)(700(Dec)=2BC(Hex))。
变频器参数号>=2000时,基本参数号PNU=变频器参数号-2000(Dec),例如P2155的基本参数号PNU=9B(Hex)(2155-2000=155(Dec)=9B(Hex))。
? IND:长度一个字,结构如下表。
Bit15- Bit 12 | Bit 11- Bit 8 | Bit 7 - Bit 0 |
PNU扩展 | 0(Hex) | 参数下标 |
IND结构
变频器参数号<2000时,PNU扩展=0(Hex)。
变频器参数号>=2000时,PNU扩展=8(Hex)。
参数下标,例如P2155[2]中括号中的2表示参数下标为2。
? PWE:读取或写入参数的数值
PZD区用于主站与从站交换过程值数据:
? PZD1: 主站?从站 控制字
主站?从站 状态字
? PZD2: 主站?从站 速度设定值
主站?从站 速度反馈值
? PZDn: MM430/440支持较多8个PZD,MM420支持较多4个PZD
根据传输的数据类型和驱动装置的不同,PKW和PZD区的数据长度不是固定的,可以通过P2012、P2013 设置。本例采用4PKW,2PZD报文格式。
2 USS协议报文定义
本文通过发送4个不同功能的报文来演示自定义USS报文的方法,USS协议详细说明请参照《MM440使用大全》*13章。
例1.把参数P2155[2]的数值修改为40.00Hz
字节数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
发送报文 | 2 | 0E | 1 | 30 | 9B | 80 | 2 | 42 | 20 | 0 | 0 | 4 | 7E | 0 | 0 | 3C |
应答报文 | 2 | 0E | 1 | 20 | 9B | 80 | 2 | 42 | 20 | 0 | 0 | FB | 31 | 0 | 0 | 9C |
报文解释:
STX | Byte1 | 起始字符 |
LGE | Byte2 | 报文长度(字节3到字节16共14个字节) |
ADR | Byte3 | 从站地址 |
PKW | Byte4-5 | PKE内容: |
Bit15- Bit 12(任务ID) =3(Hex),修改参数数值双字 | ||
Bit15- Bit 12(应答ID) =2(Hex),传送参数数值双字 | ||
Bit10- Bit 0(基本参数号PUN)=2155-2000(Dec)=9B(Hex) | ||
Byte6-7 | IND内容: | |
Bit15- Bit 12(PNU扩展) =8(Hex),参数号大于2000 | ||
Bit7- Bit 0(参数下标)=2(Hex),P2155[2] | ||
Byte8-11 | 参数值,42 20 00 00(Hex)=40.0(浮点数) | |
PZD | Byte12-13 | PZD1 |
Byte14-15 | PZD2 | |
BCC | Byte16 | 异或校验和 |
注:黄色标记表示应答报文中的内容
例2.读取参数P0700[0]的数值
字节数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
发送报文 | 2 | 0E | 1 | 12 | BC | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 7E | 0 | 0 | D9 |
应答报文 | 2 | 0E | 1 | 12 | BC | 0 | 0 | 0 | 0 | 0 | 5 | FB | 31 | 0 | 0 | 6C |
报文解释:
STX | Byte1 | 起始字符 |
LGE | Byte2 | 报文长度(字节3到字节16共14个字节) |
ADR | Byte3 | 从站地址 |
PKW | Byte4-5 | PKE内容: |
Bit15- Bit 12(任务ID) =1(Hex),读取参数数值 | ||
Bit15- Bit 12(应答ID) =1(Hex),传送参数数值单字 | ||
Bit10- Bit 0(基本参数号PUN)=700(Dec)=2BC(Hex) | ||
Byte6-7 | IND内容: | |
Bit15- Bit 12(PNU扩展) =0(Hex),参数号小于2000 | ||
Bit7- Bit 0(参数下标)=0(Hex),P700[0] | ||
Byte8-11 | 参数值,5(Hex)=5(Dec) | |
PZD | Byte12-13 | PZD1 |
Byte14-15 | PZD2 | |
BCC | Byte16 | 异或校验和 |
注:黄色标记表示应答报文中的内容
例3.不需要读写参数只发送停止变频器报文
字节数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
发送报文 | 2 | 0E | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 7E | 0 | 0 | 77 |
应答报文 | 2 | 0E | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | FB | 31 | 0 | 0 | C7 |
例4.不需要读写参数只送启动变频器、设定频率50Hz报文
字节数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
发送报文 | 2 | 0E | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 7F | 40 | 0 | 36 |
应答报文 | 2 | 0E | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | FF | 34 | 3F | FF | 6 |
例3、4报文比较简单只需要定义PZD中的内容,PKW区内容可以设置为0。
请注意:如果按照以上4个例子发送报文可能会收到与例子中不一样的应答报文,这并不代表报文存在问题,可能由于变频器状态不同或参数设置不同造成。例子报文中已经计算了BCC校验的值,如果使用其他的报文需要自己计算BCC校验。
3 硬件组态
MM4系列变频器提供的串行接口为RS485接口,S7-300 PLC有3种通讯模块支持RS485接口:
1. 采用带有集成RS485接口的CPU例如CPU31X-2PtP;
2. RS485接口的CP340通讯模块;
3. RS485接口的CP341通讯模块;
以上三种模块都可以通过下表中的接线方式与MM4变频器连接,本文中采用1台CPU314-2PtP与1台MM440通讯。
信号 | CPU314-2PtP | MM430/MM440 | MM420 |
RS485接口针脚 | 端子 | 端子 | |
P+ | 11 | 29 | 14 |
N- | 4 | 30 | 15 |
S7-300 RS485接口与MM440 USS接线
3.1 PLC硬件组态
1) 首先打开STEP7新建项目并插入CPU314-2PtP。
2) 双击CPU314-2PtP的X2端口PtP,打开PTP属性对话框General栏,Protocol复选框中选择“ASCII”协议。
3) Addresses栏中记录起始地址“1023”,在后面的编程中使用。
4) Transfer栏中设置通讯速率“9600bps”,报文格式:“8”位数据位,“1”位停止位,“Even”偶校验,数据流控制选择“None”。
5) End Delimiter栏中设置接收报文结束方式“After character delay time elapses”利用两个报文的间隔时间来判断报文是否结束,并设置字符延时时间“4ms”(该时间可使用默认设置,默认设置时间随通讯速率不同时间也不同)。
6) Signal Assignment栏中设置串行通信接口信号模式为“Half Duplex(RS-485)Two-wire Mode”半双工两线制RS485模式,空闲状态信号状态“R(A)0v、R(B)5V”。
通过以上步骤完成对CPU314-2PtP串行接口的基本设置,如需更详细的信息请参照CPU314-2PtP手册。
3.2 变频器参数设置
与通信有关的变频参数:
参数 | 设置值 | 功能说明 | ||
P0700 | 5 | 命令源选择:com链路USS通讯 | ||
P1000 | 5 | 频率设定源选择:com链路USS通讯 | ||
P2009 | 0 | USS规格化:不规格化 | ||
P2010 | 6 | USS波特率:9600bps | ||
P2011 | 1 | USS地址:1 | ||
P2012 | 2 | PZD长度:2个字 | ||
P2013 | 4 | PKW长度:4个字 | ||
r2024~r2031 | 只读 | USS诊断数据 |
以上参数只对与变频器USS通讯相关的参数进行介绍,变频器其他参数设置请参照《MM440使用大全》。
4 USS通讯编程
4.1 CPU314-2PtP串行接口发送和接收程序
CPU314-2PtP调用系统功能块SFB60和SFB61进行串行通讯接口数据的发送和接收,SFB60与SFB61系统功能块已经包含在CPU中,只需在OB1中直接调用并分配背景数据块即可。在本例中分配DB60为SFB60的背景数据块,在OB1中调用程序:
在SFB60发送通信块中需要对下列参数进行赋值:
REQ: | 发送请求,每个上升沿发送一帧数据。 |
R: | 终止发送。 |
LADDR: | PtP串口的起始地址,请查看PLC硬件配置中,PtP属性对话框Addresses栏址中显示的数值,本例中为“1023”,转化为16进制数为W#16#3FF。 |
DONE: | 发送完成输出一个脉冲。 |
ERROR: | 发送错误输出1。 |
STATUS: | 发送块状态字。 |
SD_1: | 发送数据区起始地址,发送数据区定义为DB1.DBB0开始的n个字节。 |
LEN: | 发送字节的长度。 |
分配DB61为SFB61的背景数据块,在OB1中调用程序:
在SFB61接收通信块中需要对下列参数进行赋值:
EN_R: | 接收使能。 |
R: | 终止接收。 |
LADDR: | PtP串口的起始地址,请查看PLC硬件配置中,PtP属性对话框Addresses栏址中显示的数值,本例中为“1023”,转化为16进制数为W#16#3FF。 |
NDR: | 接收到新数据输出一个脉冲。 |
ERROR: | 接收错误输出1。 |
STATUS: | 接收块状态字。 |
RD_1: | 接收数据区起始地址,接收数据区定义为DB2.DBB0开始的n个字节。 |
LEN: | 接收到数据的长度。 |
4.2 通过发送程序发送定义好的USS报文
将例子中的报文按字节顺序传送到从DB1.DBB0开始的16个字节中,设置MW104=16,当M100.0上升沿时PLC即发送一帧USS报文。如果变频器接收到的报文无误就会返回一条响应报文,需要将M200.0置1 PLC就会接收到响应报文,并把报文存储到从DB2.DBB0开始的16个字节中。
4.3使用S7-300 PLC编写BCC校验程序
在USS通讯中变频器在收到主站发送的报文后会重新计算报文的BCC校验,如果计算结果与报文传送的BCC校验不一致,那么表明变频器接收到的信息是无效的,变频器将丢弃这一信息,并且不向主站发出应答信号。所以正确计算BCC校验尤为重要。前面提到的4个例子报文中已经计算好了BCC校验,下面给出利用S7-300 PLC编程计算15个字节的BCC校验的程序。
15字节的BCC校验程序
程序中将DB1.DBB0到DB1.DBB14中的内容依次进行异或计算,并把计算结果保存到DB1.DBB15中。
在变频器应用中,为了防止电机由于过电流或外部原因导致过热而被损坏,设定电机的温度保护功能。即当电机的温度**过一定值时,变频器跳闸(OFF2)。通常情况下,温度保护有以下两种方式:
通过电机的温度模型对电机进行保护;
当我们对变频器进行快速调试时,变频器会根据电机相关参数,如功率、电流等参数来建立电机温度模型。对于西门子标准电机,电机模型数据比较准确,但对于第三方电机,在完成快速调试之后,建议用户做电机参数自动识别,如参数(P0340, P1910),建立电机等效电路数据,以便更好地计算电机内部能量损失。
在变频器运行过程中,变频器会实时监控实际输出电流,通过I2t 计算来判断电机是否过温,当I2t 计算结果**过P0614 (对于MM420), P0604(对于 MM440,MM430)里所限定的温度时,变频器会采取在P0610中所设定的措施,如报警、跳闸等。如下图1所示:
图 1 电机温度保护模型
注:利用电机温度模型对电机进行温度保护是西门子标准传动中所有产品具备的功能。
通过温度传感器进行外部保护
常见的温度传感器有两种:PTC; KTY84。
1)PTC 传感器:
PTC(Positive-Temperature-Characteristic)传感器是一个具有正温度特性的电阻。在常温下,PTC 电阻的阻值不高(50-10O欧姆)。一般情况下,电动机里是把三个PTC 温度传感器串联连接起来(根据电动机制造厂家的设计),这样,“冷态”下的PTC 电阻值范围为150 至300 欧姆。PTC 温度传感器也常常称为“冷导体”。但是,在某一特定温度时,PTC 的阻值会急剧上升。电动机制造厂家是根据电动机绝缘的常规运行温度来选择这一特定温度的。由于PTC 传感器是安装在电动机的绕组中,这样,就可以根据电阻值的变化来判断电动机是否过热。PTC 温度传感器不能用来测量温度的具体数值。
对于变频器:MM440;MM430;G120提供了电机温度传感器的接口,PTC 传感器保护可以与电机温度模型同时工作。例如MM440,当电动机的PTC已经接到MM440 变频器的控制端14 和15 时,只要选择P0601=1(采用PTC 温度传感器)激活电动机温度传感器的功能,那么,MM4变频器就会知道电机的状态,过热时变频器就会故障跳闸使电动机得到保护。
如果PTC 电阻值**过2000 欧姆,变频器将显示故障F0004(电动机过温)。 如果PTC 电阻值低于100 欧姆,变频器将显示故障F0015(电动机温度检测信号丢失)。这样,当电动机过热和温度传感器断线时,都能使电动机得到保护。
此外,电动机还受到变频器中电动机温度模型的监控,如下图,传感器与温度模型构成“或”关系,形成了一个电动机过热保护的冗余系统。
2)KTY84 传感器:
KTY84 传感器的原理是基于半导体温度传感器(二极管),其电阻值的变化范围从0℃时的500 欧姆可到300℃时的2600欧姆。KTY84 具有正的温度系数,但与PTC 不同,它的温度特性几乎是线性的。电阻的性能可以与具有很高温度系数的测量电阻兼容。
如果KTY84 传感器被激活(P0610=2),变频器会对KTY传感器的阻值进行监控,同时变频器也根据电动机温度模型自动计算电动机的温度。KTY84 传感器识别出断线时,就发出报警信号A0512(电动机温度检测信号丢失),并自动切换到电动机的温度模型。如下图2:
图 2 温度模型与传感器回路
对于变频器MM420、G110,没有提供温度传感器接口,我们能够通过电机温度模型对电机进行温度保护,同时,我们也可以用数字端子触发外部故障的方式来保护电机,因为对于通常的温度传感器,其输出阻抗会随温度成线性关系变化,如下图3所示。因此传感器的阻抗能够反映当前电机温度,我们可以按照图4连接方式,随着传感器阻值增大,端子5上的电压会逐渐增大。当电压**过数字量的触发电压时,数字端子有效,触发外部故障跳闸。设置参数如下: P0701, P0702 or P0703 = 29.
图 3 电阻与温度关系曲线
图 4 外部端子触发故障
另外,我们也可以利用温度继电器来触发外部故障,如在西门子低压产品中,有可以用来测量电机温度的继电器,如3RS1000-1CK10,我们可以设定一个限定值,当电机温度**过此值时,继电器动作,触发外部跳闸。
西门子6SL3210-1PE23-8UL0