硬件设备:SITRANS MASS6000 、 Profibus PA 模块、CP5512 通讯卡、S7400CPU 、DP/PA 耦合器等等
软件:STEP 7 V5.3
硬件组态图如下: 控制命令地址为512
OB1 程序图如下:
在OB1 块中编程如下:
Network 1 // 读值
//质量流量
CALL "DPRD_DAT"
LADDR :=W#16#200
RET_VAL:=MW100
RECORD :=P#M 110.0 BYTE 5
//累积流量1(TOTALIZER1)
CALL "DPRD_DAT"
LADDR :=W#16#205
RET_VAL:=MW102
RECORD :=P#M 115.0 BYTE 5
//累积2(TOTALIZER2), 具体累积含义,参照二次仪表中的菜单设置。
CALL "DPRD_DAT"
LADDR :=W#16#20A
RET_VAL:=MW104
RECORD :=P#M 120.0 BYTE 5
Network 2 // 计数器1 运行1 秒,当计数器2 运行结束,计数器1 重新置位
AN M 1.0
L S5T#1S
SE T 1
Network 3 // 当计数器1 运行结束,置控制累积流量字节为1(置零)
A T 1
JNB _001
L B#16#1
T PQB 512
SET
SAVE
CLR
_001: A BR
= M 1.1
Network 4 //计数器2 运行20 秒,当计数器1 运行结束,计数器2 置位
AN M 1.1
L S5T#20S
SE T 2
Network 5 //当计数器2 运行结束,置控制累积流量字节为0(累积)
A T 2
JNB _002
L B#16#0
T PQB 512
SET
SAVE
CLR
_002:A BR
= M 1.0
通过变量表观察如下图变化,累积量1(MD115 )在一定时间后自动置零:
以上实例中,质量流量为0.4g/s 左右
累积流量控制字节各位的含义如下:
位 7 6 5 4 3 2 1 0
功能 ZA T2H T1H T2R T1R
T1R= 累积1 置零
T2R= 累积2 置零
T1H= 累积1 保持/运行
T2H= 累积2 保持/运行
ZA= 零点校正
为保证位的改变,请保持每个位的激活时间在100mS 以上。当位从0 到1,命令有效。但是对于T1H 和T2H 来说,0 表示运行,1 表示保持。
备注:对于电磁流量计MAG6000 ,累积流量控制命令在SLOT4 槽中,对于质量流量计MASS6000, 累积流量控制命令在SLOT10 槽中。控制命令长度为1 个字节。
其他,如果需要将累积流量1 保持住,可以设定如下图所示:
其他命令控制依次类推即可。
程序软件包如附件:
在静止流量的情况下,也可以通过PDM V6.0 观察各参数如下图:
关键词
MASS6000质量流量计,PROFIBUS PA模块,置零
CPU自带的以太网接口可以使用OPEN IE的方式实现如下协议,分别介绍如下:
? TCP
? UDP
? ISO-on-TCP
注意:以下内容任何用户可以免费使用,复制和传递他人,程序的作者及拥有者不负责软件的功能性和兼容性,使用者须自己承担责任,由于内容免费,所以不保证错误的更正和热线支持!
1. TCP通信
1.1通信程序块的准备
如下的通信块可以用来建立TCP通信,您需要把这些程序块拷贝到您的项目中:
1) FB65 "TCON" 用于建立连接,连接时需要UDT65来提供参数
2) FB66 "TDISCON" 用于断开连接
3) FB63 "TSEND" 用于发送数据到S7站点、S5站点、PC站或者第三方设备
4) FB64 "TRCV" 用于从S7站点、S5站点、PC站或者第三方设备接收数据
5) UDT65 "TCON_PAR"存放用户通信参数
6) FC97 "SET_TCP_ENDPOINTx" 用于修改UDT65类型变量内通信对象参数
FB63,64,65,66这四个功能块可以在Standard Library -> Communication Blocks里得到:
图 01: FB63,64,65,66
FC97与UDT65需要从如下项目中打开获得:
( 42 KB )
西门子6ES5490-8MB11
图 02: FC97与UDT65
首先建立一个S7-300或者S7-400站,拷贝如上程序块到项目中。
1.2通信程序编写
1.2.1 生成数据块
在程序中生成一个DB块,块号不限(本例为DB101),在块中建立变量DB_VAR,类型为UDT65
图 03: 生成UDT65类型变量
1.2.2在OB1中编程
首先调用FC97 "SET_TCP_ENDPOINTx"
图 04: 调用FC97
FC97参数说明如下:
? ID: 连接ID
? DEV_ID
DEV_ID = B#16#1 用于本PLC型号(注意不是通信对方)为 IM151-8 PN/DP CPU
DEV_ID = B#16#2 用于本PLC型号(注意不是通信对方)为 CPU31x-2PN/DP或IM154-8 CPU
DEV_ID = B#16#3 用于本PLC型号(注意不是通信对方)为 CPU319-3PN/DP
DEV_ID = B#16#5用于本PLC型号(注意不是通信对方)为 CPU41x-3PN/DP
? ACTIVE: 主动或是被动建立连接,通信双方必须一个主动,一个被动
? LOC_PORT: CPU本地的TCP端口
? REM_PORT: 通信伙伴的TCP远程端口
? IP_ADDR1 ... IP_ADDR4: 通信伙伴的IP地址
? V23:本机是否是CPU31x-2PN/DP FIRMWARE 版本为2.3或以下版本
? CON_DB:用UDT65生成的变量
图05: 调用FB65 "T_CON"
调用FB65 ,通过提供给FB65的输入参数"REQ"一个上升沿来建立连接。 “ID”为连接ID,“CONNECT”参数填写用UDT65生成的变量, 连接建立后会一直保持,直到调用FB66 "TDISCON"断开连接,CPU停止或者断电。
1.2.3 调用发送和接收程序
图06: 调用 FB63,64发送接收数据
FB63 "TSEND" 发送请求依靠输入参数"REQ"的上升沿来实现,如果“BUSY”位为true时不要触发"REQ"。输出参数 "DONE", "ERROR" 和 "STATUS" 用于评估工作的情况。
FB64 "TRECV" 用于接收数据,EN_R始终为true, “ID “填写连接ID,”DATA”填写接收数据区,输出参数"NDR" 用于表示新的数据已经收到,输出参数"LEN" 表示接收的数据长度。
1.2.4断开连接
调用FB66 "TDISCON",“ID “填写连接ID,输入参数"REQ"的上升沿来实现断开连接操作。
图 07: 调用FB66 "TDISCON"
2. UDP通信
2.1通信程序块的准备
如下的通信块可以用来建立UDP通信,您需要把这些程序块拷贝到您的项目中:
1) FB65 "TCON" 用于建立连接,连接时需要UDT65来提供参数
2) FB66 "TDISCON" 用于断开连接
3) FB67 "TUSEND"用于发送数据到S7站点、S5站点、PC站或者第三方设备
4) FB68 "TURCV"用于从S7站点、S5站点、PC站或者第三方设备接收数据
5) UDT65 "TCON_PAR"存放用户通信参数
6) UDT66 "TADDR_PAR"存放用户通信参数
7) FC95"SET_UDP_ENDPOINT"用于建立本地UDP通信参数
8) FC96"SET_UDP_REMOTE"用于建立远程UDP通信参数
FB65,66,67,68这四个功能块可以在Standard Library -> Communication Blocks里得到:
图 08: FB65,66,67,68
FC95,96与UDT65,66需要从如下项目中打开获得:
( 41 KB )
图 09: FC95,96与UDT65,66
首先建立一个S7-300或者S7-400站,拷贝如上程序块到项目中。
2.2通信程序编写
2.2.1 生成数据块
然后在程序中生成一个DB块,块号不限(本例为DB101),在块中建立变量DB_VAR,类型为UDT65
图 10: 生成UDT65类型变量
然后在程序中生成另一个DB块,块号不限(本例为db102),在块中建立变量DB_VAR,类型为UDT66
图 11: 生成UDT66类型变量
2.2.2在OB1中编程
首先调用FC95,96
图 12:调用FC95,96
定义的本地UDP端点连接参数:
通过FC95 "SET_UDP_ENDPOINT"设置,下列参数需要考虑:
? ID: 连接ID
? DEV_ID
DEV_ID = B#16#1 用于本PLC型号(注意不是通信对方)为 IM151-8 PN/DP CPU
DEV_ID = B#16#2 用于本PLC型号(注意不是通信对方)为 CPU31x-2PN/DP或IM154-8 CPU
DEV_ID = B#16#3 用于本PLC型号(注意不是通信对方)为CPU319-3PN/DP
DEV_ID = B#16#5用于本PLC型号(注意不是通信对方)为CPU41x-3PN/DP
? LOC_PORT: CPU本地的TCP端口
通过FC96 "SET_UDP_REMOTE"定义远端的UDP端点. 下列参数需要考虑:
REM_PORT: 通信方端口号
IP_ADDR1 ... IP_ADDR4: 通信方IP地址
图 13: 调用FB65 "T_CON"
调用FB65 ,通过提供给FB65的输入参数"REQ"一个上升沿来建立连接。 “ID”为连接ID,“CONNECT”参数填写用UDT65生成的变量, 连接建立后会一直保持,直到调用FB66 "TDISCON"断开连接,CPU停止或者断电。
2.2.3 调用发送和接收程序
图 14: 调用FB67,68接收和发送数据
FB67 "TUSEND"发送请求依靠输入参数"REQ"的上升沿来实现,如果“BUSY”位为true时不要触发"REQ"。输出参数 "DONE", "ERROR" 和 "STATUS" 用于评估工作的情况。"ADDR"填写UDT66生成的变量。
FB68 "TURCV" 用于接收数据,EN_R始终为true, “ID “填写连接ID,”DATA”填写接收数据区,输出参数"NDR" 用于表示新的数据已经收到,输出参数"LEN" 表示接收的数据长度。"ADDR"填写UDT66生成的变量。
2.2.4断开连接
调用FB66 "TDISCON",“ID “填写连接ID,输入参数"REQ"的上升沿来实现断开连接操作。
图 15: 调用FB66 "TDISCON"
3. ISO ON TCP通信
3.1通信程序块的准备
如下的通信块可以用来建立ISO ON TCP通信,您需要把这些程序块拷贝到您的项目中:
1) FB65 "TCON" 用于建立连接,连接时需要UDT65来提供参数
2) FB66 "TDISCON" 用于断开连接
3) FB63 "TSEND" 用于发送数据到S7站点、S5站点、PC站或者第三方设备
4) FB64 "TRCV" 用于从S7站点、S5站点、PC站或者第三方设备接收数据
5) UDT65 "TCON_PAR"存放用户通信参数
6) FB420 "SET_ISO_ENDPOINT" 用于修改UDT65内通信对象参数
7) FC21 被FB420调用
FB63,64,65,66这四个功能块可以在Standard Library -> Communication Blocks里得到:
图 16: FB63,64,65,66
FB420 FC21与UDT65需要从如下项目中打开获得:
( 50 KB )
图 17: FB420 FC21与UDT65
首先建立一个S7-300或者S7-400站,拷贝如上程序块到项目中。
3.2通信程序编写
3.2.1 生成数据块
在程序中生成一个DB块,块号不限(本例为DB101),在块中建立变量DB_VAR,类型为UDT65
图 18: 生成UDT65类型变量
3.2.2在OB1中编程
首先生成一个FB块,本例为FB400:
在静态变量区建立一个结构“T_TSAP“,包含如下变量:
1) LOC_RACK_SLOT (BYTE)= B#16#2 表示有两个前导字符 0xE0 (CPU31x-2PN/DP 或者 CPU319-3PN/DP规定)和 0x02(CPU槽号)
本地 TSAP 远程TSAP
ASCII TCP-1 TCP-1
Hexadecimal E0.02.54.43.50.2D.31 54.43.50.2D.31
2) LOC_TSAP(STRING14)= 本地用户定义的ASCII字符 (默认 -> 'TCP-1')
3) REM_RACK_SLOT(BYTE)= B#16#0 不使用两个前导符,只适用于第三方设备!如果是西门子PLC作为通信对象,则需要根据实际情况填写CPU 槽号,例如B#16#2
4) REM_TSAP (STRING16)= 远程用户定义的ASCII字符(默认 -> 'TCP-1'):
图 19: 生成T_TSAP结构
调用FB420
图 20: 调用FB420
? ID: 连接ID
? DEV_ID
DEV_ID = B#16#1 用于本PLC型号(注意不是通信对方)为 IM151-8 PN/DP CPU
DEV_ID = B#16#2 用于本PLC型号(注意不是通信对方)为 CPU31x-2PN/DP或IM154-8 CPU
DEV_ID = B#16#3 用于本PLC型号(注意不是通信对方)为CPU319-3PN/DP
DEV_ID = B#16#5用于本PLC型号(注意不是通信对方)为CPU41x-3PN/DP
? ACTIVE: 主动或是被动建立连接, 通信双方必须一个主动,一个被动
? T_TSAP: 静态变量区的结构变量,用于ISO ON TCP 通信的TSAP地址
? IP_ADDR1 ... IP_ADDR4: 通信伙伴的IP地址
? CON_DB:用UDT65生成的变量
图21: 调用FB65 "T_CON"
调用FB65 ,通过提供给FB65的输入参数"REQ"一个上升沿来建立连接。 “ID”为连接ID,“CONNECT”参数填写用UDT65生成的变量, 连接建立后会一直保持,直到调用FB66 "TDISCON"断开连接,CPU停止或者断电。
3.2.3 调用发送和接收程序
图22: 调用 FB63,64发送接收数据
FB63 "TSEND" 发送请求依靠输入参数"REQ"的上升沿来实现,如果“BUSY”位为true时不要触发"REQ"。输出参数 "DONE", "ERROR" 和 "STATUS" 用于评估工作的情况。
FB64 "TRECV" 用于接收数据,EN_R始终为true, “ID “填写连接ID,”DATA”填写接收数据区,输出参数"NDR" 用于表示新的数据已经收到,输出参数"LEN" 表示接收的数据长度。
3.2.4断开连接
调用FB66 "TDISCON",“ID “填写连接ID,输入参数"REQ"的上升沿来实现断开连接操作。
图 23: 调用FB66 "TDISCON"
S7300电源模板
6ES7307-1BA00-0AA0
6ES7307-1EA00-0AA0
6ES7307-1KA01-0AA0
CPU
6ES7312-1AE13-0AB0
6ES7312-5BE03-0AB0
6ES7313-5BF03-0AB0
6ES7313-6BF03-0AB0
6ES7313-6CF03-0AB0
6ES7314-1AG13-0AB0
6ES7314-6BG03-0AB0
6ES7314-6CG03-0AB0
6ES7315-2AG10-0AB0
6ES7315-2EH13-0AB0
6ES7317-2AJ10-0AB0
6ES7317-2EK13-0AB0
6ES7318-3EL00-0AB0
内存卡
6ES7 953-8LF20-0AA0
6ES7 953-8LG11-0AA0
6ES7 953-8LJ20-0AA0
6ES7 953-8LL20-0AA0
6ES7 953-8LM20-0AA0
6ES7 953-8LP20-0AA0
开关量模板
6ES7 321-1BH02-0AA0
6ES7 321-1BH10-0AA0
6ES7 321-1BH50-0AA0
6ES7 321-1BL00-0AA0
6ES7 321-7BH01-0AB0
6ES7 321-1EL00-0AA0
6ES7 321-1FF01-0AA0
6ES7 321-1FF10-0AA0
6ES7 321-1FH00-0AA0
6ES7 321-1CH00-0AA0
6ES7 321-1CH20-0AA0
6ES7 322-1BH01-0AA0
6ES7 322-1BH10-0AA0
6ES7 322-1CF00-0AA0
6ES7 322-8BF00-0AB0
6ES7 322-5GH00-0AB0
6ES7 322-1BL00-0AA0
6ES7 322-1FL00-0AA0
6ES7 322-1BF01-0AA0
6ES7 322-1FF01-0AA0
6ES7 322-5FF00-0AB0
6ES7 322-1HF01-0AA0
6ES7 322-1HF10-0AA0
6ES7 322-1HH01-0AA0
6ES7 322-5HF00-0AB0
6ES7 322-1FH00-0AA0
6ES7 323-1BH01-0AA0
6ES7 323-1BL00-0AA0
模拟量模板
6ES7 331-7KF02-0AB0
6ES7 331-7KB02-0AB0
6ES7 331-7NF00-0AB0
6ES7 331-7NF10-0AB0
6ES7 331-7HF01-0AB0
6ES7 331-1KF01-0AB0
6ES7 331-7PF01-0AB0
6ES7 331-7PF11-0AB0
6ES7 332-5HD01-0AB0
6ES7 332-5HB01-0AB0
6ES7 332-5HF00-0AB0
6ES7 332-7ND02-0AB0
6ES7 334-0KE00-0AB0
6ES7 334-0CE01-0AA0
附件
6ES7 365-0BA01-0AA0
6ES7 360-3AA01-0AA0
6ES7 361-3CA01-0AA0
6ES7 368-3BB01-0AA0
6ES7 368-3BC51-0AA0
6ES7 368-3BF01-0AA0
6ES7 368-3CB01-0AA0
6ES7 390-1AE80-0AA0
6ES7 390-1AF30-0AA0
6ES7 390-1AJ30-0AA0
6ES7 390-1BC00-0AA0
6ES7 392-1AJ00-0AA0
6ES7 392-1AM00-0AA0
6ES7 392-1BM01-0AA0
功能模板
6ES7 350-1AH03-0AE0
6ES7 350-2AH00-0AE0
6ES7 351-1AH01-0AE0
6ES7 352-1AH02-0AE0
6ES7 355-0VH10-0AE0
6ES7 355-1VH10-0AE0
6ES7 355-2CH00-0AE0
6ES7 355-2SH00-0AE0
6ES7 338-4BC01-0AB0
6ES7 352-5AH00-0AE0
6ES7 352-5AH00-7XG0
通讯模板
6ES7 340-1AH02-0AE0
6ES7 340-1BH02-0AE0
6ES7 340-1CH02-0AE0
6ES7 341-1AH01-0AE0
6ES7 341-1BH01-0AE0
6ES7 341-1CH01-0AE0
6ES7 870-1AA01-0YA0
6ES7 870-1AB01-0YA0
6ES7 902-1AB00-0AA0
6ES7 902-1AC00-0AA0
6ES7 902-1AD00-0AA0
6ES7 902-2AB00-0AA0
6ES7 902-2AC00-0AA0
6ES7 902-2AG00-0AA0
6ES7 902-3AB00-0AA0
6ES7 902-3AC00-0AA0
6ES7 902-3AG00-0AA0
6GK7 342-5DA02-0XE0
6GK7 342-5DF00-0XE0
6GK7 343-5FA01-0XE0
6GK7 343-1EX30-0XE0
6GK7 343-1EX21-0XE0
6GK7 343-1CX00-0XE0
6GK7 343-1CX10-0XE0
6GK7 343-1GX20-0XE0
6GK7 343-1GX21-0XE0
6GK7 343-1HX00-0XE0
6GK7 343-2AH00-0XA0
6ES7971-1AA00-0AA0
6ES7971-5BB00-0AA0
6ES7314-6EH04-0AB0
西门子S7-400电源模块
6ES7 407-0DA02-0AA0 西门子电源模块(4A)
6ES7 407-0KA02-0AA0 西门子电源模块(10A)
6ES7 407-0KR02-0AA0 西门子电源模块(10A)冗余
6ES7 407-0RA02-0AA0 西门子电源模块(20A)
6ES7 405-0DA02-0AA0 西门子电源模块(4A)
6ES7 405-0KA02-0AA0 西门子电源模块(10A)
6ES7 405-0RA01-0AA0 西门子电源模块(20A)
6ES7 971-0BA00 西门子备用电池
西门子S7-400CPU
6ES7 412-3HJ14-0AB0 西门子CPU 412-3H; 512KB程序内存/256KB数据内存
6ES7 414-4HM14-0AB0 西门子CPU 414-4H; 冗余热备CPU 2.8 MB RAM
6ES7 417-4HT14-0AB0 西门子CPU 417-4H; 冗余热备CPU 30 MB RAM
6ES7 400-0HR00-4AB0 西门子412H 系统套件包括 2 个CPU、1个H型*机架、2个电源、2个1M 存储
卡、4个同步模块、2根同步电缆,以及4个备用电池(PS407 10A)
6ES7 400-0HR50-4AB0 西门子412H 系统套件包括 2 个CPU、1个H型*机架、2个电源、2个1M 存储
卡、4个同步模块、2根同步电缆,以及4个备用电池(PS405 10A)
6ES7 412-1XJ05-0AB0 西门子CPU412-1,144KB程序内存/144KB数据内存
6ES7 412-2XJ05-0AB0 西门子CPU412-2,256KB程序内存/256KB数据内存
6ES7 414-2XK05-0AB0 西门子CPU414-2,512KB程序内存/512KB数据内存
6ES7 414-3XM05-0AB0 西门子CPU414-3,1.4M程序内存/1.4M数据内存 1个IF模板插槽
6ES7 414-3EM05-0AB0 西门子CPU414-3PN/DP 1.4M程序内存/1.4M数据内存 1个IF模板插槽
6ES7 416-2XN05-0AB0 西门子CPU416-2,2.8M程序内存/2.8M数据内存
6ES7 416-3XR05-0AB0 西门子CPU416-3,5.6M程序内存/5.6M数据内存 1个IF模板插槽
6ES7 416-3ER05-0AB0 西门子CPU416-3PN/DP 5.6M程序内存/5.6M数据内存 1个IF模板插槽
6ES7 416-2FN05-0AB0 西门子CPU416F-2,2.8M程序内存/2.8M数据内存
6ES7 416-3FR05-0AB0 西门子CPU416F-3PN/DP,5.6M程序内存/5.6M数据内存
6ES7 417-4XT05-0AB0 西门子CPU417-4,15M程序内存/15M数据内存
西门子S7-400内存卡
6ES7 955-2AL00-0AA0 西门子2 X 2M字节 RAM
6ES7 955-2AM00-0AA0 西门子2 X 4M字节 RAM
6ES7 952-0AF00-0AA0 西门子64K字节 RAM
6ES7 952-1AH00-0AA0 西门子256K字节 RAM
6ES7 952-1AK00-0AA0 西门子1M字节 RAM
6ES7 952-1AL00-0AA0 西门子2M字节 RAM
6ES7 952-1AM00-0AA0 西门子4M字节 RAM
6ES7 952-1AP00-0AA0 西门子8M字节 RAM
6ES7 952-1AS00-0AA0 西门子16M字节 RAM
6ES7 952-1AY00-0AA0 西门子64M字节 RAM
6ES7 952-0KF00-0AA0 西门子64K字节 FLASH EPROM
6ES7 952-0KH00-0AA0 西门子256K字节 FLASH EPROM
6ES7 952-1KK00-0AA0 西门子1M字节 FLASH EPROM
6ES7 952-1KL00-0AA0 西门子2M字节 FLASH EPROM
6ES7 952-1KM00-0AA0 西门子4M字节 FLASH EPROM
6ES7 952-1KP00-0AA0 西门子8M字节 FLASH EPROM
6ES7 952-1KS00-0AA0 西门子16M字节 FLASH EPROM
6ES7 952-1KT00-0AA0 西门子32M字节 FLASH EPROM
6ES7 952-1KY00-0AA0 西门子64M字节 FLASH EPROM
西门子S7-400开关量输入模板
6ES7 421-7BH01-0AB0 西门子开关量输入模块(16点,24VDC)中断
6ES7 421-1BL01-0AA0 西门子开关量输入模块(32点,24VDC)
6ES7 421-1EL00-0AA0 西门子开关量输入模块(32点,120VUC)
6ES7 421-1FH20-0AA0 西门子开关量输入模块(16点,120/230VUC)
6ES7 421-7DH00-0AB0 西门子开关量输入模块(16点,24V到60VUC)