文章目录
- 前言
- 一、硬件组态
- 二、编写通讯程序
- 1.新建数据类型“ABB_UDT”
- 2.新建DB块“变频DB”
- 3.新建FC块“轴流风机”
- 二、编写模拟量转换程序
- 1.编写速度设定程序
- 2.编写速度反馈程序
- 3.编写电流反馈程序
- 4.编写力矩反馈程序
- 三、编写启/停控制程序
- 总结
前言
本文基于某实际项目,提供一种西门子S7-1500PLC与ABB变频器实现通讯、速度给定、速度反馈等功能的方法。
此项目中,ABB变频器用于控制轴流风机,需要对轴流风机的转速进行控制,同时读取转速反馈、电流反馈和力矩反馈。
一、硬件组态
ABB与S7-1500PLC通过专用的GSD文件实现通讯连接,在博途中组态GSD文件,如下图所示:
GSD文件已上传,可自行下载ABB变频器GSD文件
二、编写通讯程序
1.新建数据类型“ABB_UDT”
其中,1-16表示通讯字,23-38表示控制字。
2.新建DB块“变频DB”
数据块“变频DB”用于存放与变频器的通讯字和控制字数据。注意:取消优化的块访问。
3.新建FC块“轴流风机”
编写如下程序,用于将GSD文件对应的输入数据传递给数据块“变频DB”对应的通讯字。
其中,引脚LADDR连接的421,表示GSD文件对应的硬件标识符,可在设备试图-属性-系统常数中查看。
引脚RET_VEL,输出故障代码,可新建一个Word类型的临时变量进行存储。
引脚RECORD,通过间接寻址,将数据传递给数据块“变频DB”对应的位。P#表示指针,DB70表示数据块“变频DB”的编号,DBX140.0表示从第140个位开始传递,BYTE 12表示传递12个字节,24位数据。
同理,编写如下程序,用于将数据块“变频DB”对应的控制字传递给GSD文件对应的输出数据。
通常情况下,将这两个程序段,分别放在所属FC块的第一段和最后一段。
二、编写模拟量转换程序
为了在上位机上实现对速度、电流、力矩等数据的写入、读取,还需要建立几个变量。
包括速度设定值,数据类型为Int;速度反馈值,数据类型为Real;电流反馈值,数据类型为Real;力矩反馈值,数据类型为Real。可自行在DB块或全局变量表中建立。
同时在上位机变量表中添加对应变量,使用IO域控件,实现上位机对以上数据的写入、读取。
1.编写速度设定程序
由于在上位机输入的速度设定值是Int类型十进制数据,而数据块“变频DB”中速度设定值是Word类型十六进制数据,故需要进行数据类型的转换。已知变频器控制的轴流风机最高转速为20000,计算公式如下:
公式一:20000.0 / 传递给变频器的速度设定值 = 1485.0 / 上位机写入的速度设定值
由公式一可推导出公式二:传递给变频器的速度设定值 =20000.0 / 1485.0 * 上位机写入的速度设定值
注意:这里计算出的“传递给变频器的速度设定值”是十进制数,还需要转换为十六进制数,才能最终传递给变频器
转速单位是Rpm
计算“传递给变频器的速度设定值”的SCL程序如下:
//速度设定
"变频DB"."1#轴流风机".CW_S_Set := INT_TO_WORD(REAL_TO_INT(20000.0 / 1485.0 * INT_TO_REAL("1#风机变频速度给定值")));
其中,1#风机变频速度给定值表示上位机输入的速度设定值,““变频DB”.“1#轴流风机”.CW_S_Set”表示传递给变频器的速度设定值。
2.编写速度反馈程序
同理,上位机显示的速度反馈值是Real类型十进制数据,而数据块“变频DB”中速度反馈值是Word类型十六进制数据。根据速度设定值的计算公式,可反推速度反馈值的计算公式。
先将变频器读取到的速度反馈值,从十六进制转换为十进制
上位机显示的速度反馈值 = 十进制变频器速度反馈值 * 1485.0 / 20000.0
转速单位是Rpm
SCL程序如下:
//速度反馈
"ID轴流风机".ID_FAN.SPEED := INT_TO_REAL(WORD_TO_INT("变频DB"."1#轴流风机".ST_S)) * 1485.0 / 20000.0;
其中,““变频DB”.“1#轴流风机”.ST_S”表示变频器传递的速度反馈值,““ID轴流风机”.ID_FAN.SPEED”表示在上位机显示的速度反馈值。
3.编写电流反馈程序
将变频器读取到的电流反馈值,由十六进制转换为十进制,即为上位机显示的电流反馈值。SCL程序如下:
//电流反馈
"ID轴流风机".ID_FAN.CURRENT := INT_TO_REAL(WORD_TO_INT("变频DB"."1#轴流风机".ST_I));
其中,““变频DB”.“1#轴流风机”.ST_I”表示变频器读取到的速度反馈值,““ID轴流风机”.ID_FAN.CURRENT”表示上位机显示的速度反馈值。
4.编写力矩反馈程序
先将变频器读取到的力矩反馈值,由十六进制转换为十进制
上位机显示的力矩反馈值 = 十进制变频器力矩反馈值 / 10000 * 100
力矩的单位是%
SCL程序如下:
//力矩反馈
"ID轴流风机".ID_FAN_Moment := INT_TO_REAL(WORD_TO_INT("变频DB"."1#轴流风机".ST_T)) / 100;
其中,““变频DB”.“1#轴流风机”.ST_T”表示变频器读取到的力矩反馈值,““ID轴流风机”.ID_FAN_Moment”表示在上位机显示的力矩反馈值。
三、编写启/停控制程序
ABB变频器的启停控制逻辑,是将控制字对应的位,置0或置1。
以本程序为例,
启动逻辑:将数据块“变频DB”中的DBX154.0 - DBX155.7位,分别设置为0010 0000 0111 1110,对应到上图则为0000 0100 0111 1110,转换成16进制为047E
停止逻辑:将数据块“变频DB”中的DBX154.0 - DBX155.7位,分别设置为0010 0000 1111 1110,对应到上图则为0000 0100 0111 1111,转换成16进制为047F
急停逻辑:将数据块“变频DB”中的DBX154.0 - DBX155.7位,分别设置为0010 0000 0011 1110,对应到上图则为0000 0100 0111 1100,转换成16进制为047C
为了便于对相应位进行赋值,可参考文章SCL核心应用课项目实战_运行设备累计功能实现中的AT指令,将Word类型数据,拆分成由16个Bool类型数据组成的数组,然后可直接对该Word数据进行赋值,拆分后的Bool数据将分别对应Word数据的各个位,最后将Bool数据组成的数组依次传递给DBX154.0 - DBX155.7位,即可实现对各个位的赋值。
程序编写如下:
- 建立一个Word类型变量“控制字”,用于存储赋值的16进制数;
- 创建FB块“16#转2#”
添加如下变量,并编写程序;
#Int_1 := #Int[0];
#Int_2 := #Int[1];
#Int_3 := #Int[2];
#Int_4 := #Int[3];
#Int_5 := #Int[4];
#Int_6 := #Int[5];
#Int_7 := #Int[6];
#Int_8 := #Int[7];
#Int_9 := #Int[8];
#Int_10 := #Int[9];
#Int_11 := #Int[10];
#Int_12 := #Int[11];
#Int_13 := #Int[12];
#Int_14 := #Int[13];
#Int_15 := #Int[14];
#Int_16 := #Int[15];
- 创建FC块“轴流风机变频器赋值”
编写如下程序:
通过对“控制字”写入不同数值,可实现变频器的启动、停止、急停。
总结
本文提供了一种西门子S7-1500PLC与ABB变频器通讯和控制的方法。注意,不同型号变频器通讯和控制方式可能有所不同,需要根据实际情况进行更改。