CPU自带的以太网接口可以使用OPEN IE的实现如下协议,分别介绍如下:
? TCP
? UDP
? ISO-on-TCP
注意:以下内容任何用户可以免费使用,和传递他人,程序的作者及拥有者不负责的功能性和兼容性,使用者须自己承担责任,由于内容免费,所以不保证错误的更正和支持!
1. TCP通信
1.1通信程序块的
如下的通信块可以用来建立TCP通信,您需要把这些程序块拷贝到您的项目中:
1) FB65 "TCON" 用于建立连接,连接时需要UDT65来提供参数
2) FB66 "SCON" 用于断开连接
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 )
图 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-N/DP
DEV_ID = B#16#5用于本PLC型号(注意不是通信)为 CPU41x-N/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 "SCON"断开连接,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 "SCON",“ID “填写连接ID,输入参数"REQ"的上升沿来实现断开连接操作。
图 07: 调用FB66 "SCON"
2. UDP通信
2.1通信程序块的
如下的通信块可以用来建立UDP通信,您需要把这些程序块拷贝到您的项目中:
1) FB65 "TCON" 用于建立连接,连接时需要UDT65来提供参数
2) FB66 "SCON" 用于断开连接
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-N/DP
DEV_ID = B#16#5用于本PLC型号(注意不是通信)为CPU41x-N/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 "SCON"断开连接,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 "SCON",“ID “填写连接ID,输入参数"REQ"的上升沿来实现断开连接操作。
图 15: 调用FB66 "SCON"
3. ISO ON TCP通信
3.1通信程序块的
如下的通信块可以用来建立ISO ON TCP通信,您需要把这些程序块拷贝到您的项目中:
1) FB65 "TCON" 用于建立连接,连接时需要UDT65来提供参数
2) FB66 "SCON" 用于断开连接
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-N/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-N/DP
DEV_ID = B#16#5用于本PLC型号(注意不是通信)为CPU41x-N/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 "SCON"断开连接,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 "SCON",“ID “填写连接ID,输入参数"REQ"的上升沿来实现断开连接操作。
图 23: 调用FB66 "SCON"
CPU
6ES7 412-3HJ14-0AB0
6ES7 414-4HM14-0AB0
6ES7 417-4HT14-0AB0
6ES7 400-0HR00-4AB0
6ES7 400-0HR50-4AB0
6ES7 412-1XJ05-0AB0
6ES7 412-2XJ05-0AB0
6ES7 414-2XK05-0AB0
6ES7 414-3XM05-0AB0
6ES7 414-3EM05-0AB0
6ES7 416-2XN05-0AB0
6ES7 416-3XR05-0AB0
6ES7 416-3ER05-0AB0
6ES7 416-2FN05-0AB0
6ES7 416-3FR05-0AB0
6ES7 417-4XT05-0AB0
内存卡
6ES7 955-2AL00-0AA0
6ES7 955-2AM00-0AA0
6ES7 952-0AF00-0AA0
6ES7 952-1AH00-0AA0
6ES7 952-1AK00-0AA0
6ES7 952-1AL00-0AA0
6ES7 952-1AM00-0AA0
6ES7 952-1AP00-0AA0
6ES7 952-1AS00-0AA0
6ES7 952-1AY00-0AA0
6ES7 952-0KF00-0AA0
6ES7 952-0KH00-0AA0
6ES7 952-1KK00-0AA0
6ES7 952-1KL00-0AA0
6ES7 952-1KM00-0AA0
6ES7 952-1KP00-0AA0
6ES7 952-1KS00-0AA0
6ES7 952-1KT00-0AA0
6ES7 952-1KY00-0AA0
开关量输入模板
6ES7 421-7BH01-0AB0
6ES7 421-1BL01-0AA0
6ES7 421-1EL00-0AA0
6ES7 421-1FH20-0AA0
6ES7 421-7DH00-0AB0
开关量输出模板
6ES7 422-1BH11-0AA0
6ES7 422-1BL00-0AA0
6ES7 422-7BL00-0AB0
6ES7 422-1FH00-0AA0
6ES7 422-1HH00-0AA0
模拟量模块
6ES7 431-0HH00-0AB0
6ES7 431-1KF00-0AB0
6ES7 431-1KF10-0AB0
6ES7 431-1KF20-0AB0
6ES7 431-7QH00-0AB0
6ES7 431-7KF00-0AB0
6ES7 431-7KF10-0AB0
6ES7 432-1HF00-0AB0
功能模板
6ES7 450-1AP00-0AE0
6ES7 451-3AL00-0AE0
6ES7 452-1AH00-0AE0
6ES7 453-3AH00-0AE0
6ES7 455-0VS00-0AE0
6ES7 455-1VS00-0AE0
6DD1 607-0AA2
6ES7 953-8LJ20-0AA0
6ES7 953-8LL20-0AA0
6ES7 953-8LM20-0AA0
6DD1 607-0CA1
6DD1 607-0EA0
6DD1 607-0EA2
6DD1 684-0GE0
6DD1 684-0GD0
西门子销售中心6SE64302AD337EA0变频器
锁存和重新触发:
在硬件配置参数"DI功能"中使能 "锁存和重新触发"后,在程序中使能软件门。当检测数字输入信号出现上升沿时,锁存当前计数值。计数功能开始计数直到检测出下一个上升沿信号,锁存当前值并重新从装载值开始计数。
如果在此过程中装载值被直接装载,反馈字中的锁存的值将不会改变,关闭软件门只会中断计数,但数字量输入的锁存和重新触发功能仍然工作正常。
在软件门使能之后,需要注意当输入信号检测到上升沿信号时计数模式会启动,参见图. 9: 锁存和重新触发功能的时序图。
图. 9: 锁存和重新触发功能的时序图
锁存:
在硬件配置参数"DI功能"中使能 "锁存和重新触发"后,在程序中使能软件门。当检测数字输入信号出现上升沿时,锁存当前计数值。计数功能开始计数直到检测出下一个上升沿信号,锁存当前值并重新从装载值开始计数。
如果在此过程中装载值被直接装载,反馈的装载值将不会改变,关闭软件门仅会中断计数,但输入信号的锁存功能仍然工作正常。
图. 10: 锁存功能时序图
7.4 同步功能
同步功能仅用户单次计数和循环计数模式,在该模式下0标志位作为旋转编码器的参考信号来使用。首先使能软件门之后 使能同步控制位。在单次计数同步下,当输入信号有一个上升沿信号时启动计数同步。在循环计数同步下,输入信号有一个上升沿信号并且每次后续的上升沿信号均 会将计数器从装载值启动同步计数。
图. 11: 同步功能时序图
7.5 在计数模式下输出控制
计数模板有一个数字量输出和一个虚拟的数字量输出(在反馈接口的状态位中),可以用来保存2个比较值,并且结果可以基于2个比较值控制。
(1) 直接控制输出
使能控制位CTRL_DO1 和 CTRL_DO2,并且保持控制直到控制位SET_DO1 和SET_DO2被置位。 状态位 STS_CMP1和STS_CMP2 显示相关的输出状态。状态位会保持当前状态直到被确认。如果 DO1和DO2没有被使能,这些状态位可能直接通过控制位影响SET_DO1 和 SET_DO2。
下方的 4 个输出表语直接控制输出应用类似,比较值可被首先加载且输出会根据比较条件控制。
(2) 计数值 >= 比较值
例如:设置比较值 2000,当计数值大于等于2000时使能输出 D01。
硬件配置:
图. 12: 比较值输出
计数模板参数设置见图. 12,仅用于设置“DI功能”作为“计数值>=比较值”,其它参数参照图. 4: 普通计数模式设置。
主循环:
//预设
SET
S DB1.DBX 4.0 // 设置软件门
S DB1.DBX 4.4 // 使能 D01
// 装载比较值
A M 100.0 //触发位
S DB1.DBX 5.2
L DB1.DBD 4
T PQD 268
L 2000
T DB1.DBD 0
T PQD 264
AN M 100.0
R DB1.DBX 5.2
L DB1.DBD 4
T PQD 268
//写控制接口
L DB1.DBD 0 // 写8个字节到1SSI 模板
T PQD 264
L DB1.DBD 4 //输出起始地址
T PQD 268
// 读反馈借口
L PID 264 // 从模板读取8个字节
T DB1.DBD 8
L PID 268 //输入起始地址
T DB1.DBD 12
监视和测试:通过使能 M100.0 装载比较值1(2000)。当编码器计数值大于等于2000,使能输出 D01,并同时将状态位STS_CMP1 (DB1.DBX14.3) 和 STS_DO1 (DB1.DBX13.3) 置位。
图. 13: 比较值 < 2000
图. 14: 比较值 > = 2000
(3) 计数值 < = 比较值
(4) 当到达比较值输出脉冲
(5) 当到达比较值时切换输出 (** D01)
Part 2: ET200S 计数模板 1通道 5V/500kHz
请参考章节1 中1通道 5V/500kHz模板应用 , 主要区别在硬件接线和硬件参数设置。
1. 硬件接线图
模块仅允许 5V 增量型编码器连接。
图. 15: 硬件接线图
2. 硬件和参数配置
图. 16: 1通道5V/500kHz 模板的参数设置
要根据编码器类型选择使用A*B* 还是A* B* DI,此处选择5V的增量型编码器。
输入信号B* 的方向可以设置为正向或反向。
参数 "计数类型"可以被设置为3种计数模式:连续计数,循环计数和单次计数。
其它参数可以使用缺省值。 ? Siemens AG, 1998, 2000
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