S7-1200 与 S7-1200 之间的 TCP 通信
S7-1200与S7-1200之间的以太网通讯可以通过TCP协议实现。 所使用的通信指令是通过调用两个 CPU 上的 T 块(、、TCON、、TSEND、TRCV)指令来实现的。 通信方式是双边通信,所以TSEND和TRCV必须成对出现。
硬件和软件要求以及执行的通信任务
硬件:
① S7-
② PC(带以太网卡)
③ TP 电缆(以太网电缆)
软件:
STEP7 V11 或
完成的通讯任务:
① 将PLC_1 的通讯数据区DB3 块中的100 字节数据发送到PLC_2 的接收数据区DB4 块。
② 将PLC_2 的通讯数据区DB3 块中的100 字节数据发送至PLC_1 的接收数据区DB4 块。
通讯编程、连接参数和通讯参数配置
1.打开STEP7 v11软件,新建一个项目
STEP7 v11的“视图”中选择“新建”,创建一个新项目
2.添加硬件并命名PLC
然后进入“视图”,双击“树”下的“添加新”,在对话框中选择所使用的S7-1200 CPU添加到机架中,并命名为PLC_1,如图1所示。
以同样的方式添加通讯伙伴的S7-1200 CPU,并将其命名为PLC_2。
图 1. 添加新设备
为了编程方便,请使用CPU属性中定义的时钟位。 定义方法如下:
在“tree”>“PLC_1”>“ ”中,选择CPU,然后在下面的属性窗口中的“”>“和时钟”下,在MB1中定义系统位,在MB0中定义时钟位,如图2 显示。
对于时钟位,我们主要使用M0.3,它是以2Hz的速率在0和1之间切换的位。 可用于自动激活发送任务。
图 2. 系统位和时钟位
3. 为通讯端口分配以太网地址
在“View”中,单击代表 CPU 上通信端口的绿色小方块。 界面的属性将显示在下面。 在“ ”下,将IP地址指定为192.168.0.1,子网掩码指定为255.255.255.0,如图3所示。
图 3. 分配 IP 地址
以同样的方式,将另一个新设备S7-1200 CPU添加到同一项目中,并为其分配IP地址192.168.0.2
4. 创建CPU之间的逻辑网络连接
在项目树“树”>“&”>“视图”视图中,为两个设备创建连接。 用鼠标点击PLC_1上通讯口的绿色小框,然后向另一个PLC_2上的通讯口拖一条线,松开鼠标,连接建立,如图4所示。
图 4. 在两个 CPU 之间建立逻辑连接
在 PLC_1 中调用并配置“TCON”、“TSEND”、“TRCV”通讯指令 1.在 PLC_1 的 OB1 中调用“TCON”通讯指令
① 在第一个CPU中调用发送通讯命令,进入“树形”>“PLC_1”>“ ”>“OB1”主程序,从右侧窗口“”>“”>“OPEN User”命令调用“TCON”创建连接,如图5所示。
图 5. 调用“TCON”通讯命令
② 创建DB2并分配连接参数,如图6
图 6. 创建连接数据块 DB2()
③ 定义PLC_1的“TCON”连接参数
PLC_1的TCON指令的连接参数需要在该指令下方的属性窗口“>”>“”中设置,如图7所示。
图 7. 定义 TCON 连接参数
连接参数说明:
终点
:可以通过单击选择按钮来选择伙伴 CPU:PLC_2
类型
:选择通讯协议为TCP(也可以选择ISO on TCP或UDP协议)
ID
:连接地址ID号。 该ID号将在后续编程中使用。
数据
:创建连接时生成的块。见图2
设置
:选择本地PLC_1作为活动连接
:定义通讯伙伴的端口号为:2000; 如果选择ISO on TCP协议,则需要设置TSAP地址(ASCII形式)。 本地PLC_1可设置为“PLC1”,伙伴PLC_2可设置为“PLC2”。
2.定义PLC_1的“TSEND”发送通讯块接口参数
①在OB1中调用“TSEND”发送100字节数据到PLC2
进入“tree”>“PLC_1”>“ ”>“OB1”主程序,从右侧窗口“”>“”>“OPEN User”调用“TSEND”指令,如图8所示。
图 8. 调用 TSEND
②创建并定义PLC_1的发送数据区DB块。
通过“树”>“PLC_1”>“添加新块”创建DB块,选择“数据块”,选择绝对寻址,点击“确定”按钮,定义发送数据区为100的数组字节。 如图9和图10所示。
图 9. 创建发送数据区 DB 块
注:对于双边编程通信的 CPU,如果通信数据区使用 DB 块,则 DB 块可以定义为符号寻址或绝对寻址。 对于指针寻址,必须创建绝对寻址的 DB 块。
图 10. 定义发送数据区域为字节类型的数组图
③定义PLC_1的“TSEND”发送通讯块接口参数,如图11所示。
图 11. 定义 TSEND 接口参数
参数说明:
输入接口参数:
要求
:= M0.3
//使用2Hz时钟脉冲,在上升沿激活发送任务
ID
: = 1
//创建连接ID
伦
:= 100
//发送数据长度
数据
:= P#DB3.DBX0.0 字节 100
// 当在数据区发送数据并使用指针寻址时,DB 块必须使用绝对寻址。
输出接口参数:
完毕
:= M300.0
//任务执行完成且无错误,该位置为1
忙碌的
:= M300.1
// 该位为1,表示任务未完成,无法激活新任务。
错误
:= M300.2
//通信过程中发生错误,该位置为1
:=MW302
//发生错误时,会显示错位信息编号。
3.在PLC_1的OB1中调用接收指令T_RCV并配置基本参数
为了实现PLC_1接收PLC_2的数据,需要调用PLC_1中的接收指令T_RCV并配置基本参数。
①创建并定义PLC_1的接收数据区DB块。
通过“树”>“PLC_1”>“添加新块”创建DB块,选择“数据块”,选择绝对寻址,点击“确定”按钮,定义发送数据区为100的数组字节。 如图12和图13所示。
图 12. 创建接收数据区 DB 块
注:对于双边编程通信的 CPU,如果通信数据区使用 DB 块,则 DB 块可以定义为符号寻址或绝对寻址。 对于指针寻址,必须创建绝对寻址的 DB 块。
图13. 定义接收数据区域为byte类型的数组
②在OB1中调用“TRCV”
进入“tree”>“PLC_1”>“OB1”主程序,从右侧窗口“”>“”>“OPEN User”调用“TRCV”命令配置界面参数,如图14 。
图14. 调用TRCV指令并配置接口参数
参数说明:
输入接口参数:
EN_R
:= 正确
//准备接收数据
ID
:= 1
//连接号使用TCON的连接参数中的ID号
伦
:= 100
//接收到的数据长度为100字节
数据
:= P#DB4.DBX0.0 字节 100
//接收数据区的地址
输出接口参数:
国家报告
:= M310.0
// 该位为1,接收任务成功完成
忙碌的
:= M310.1
// 该位为1,表示任务未完成,无法激活新任务。
错误
:= M310.2
// 通讯过程中发生错误,该位置置1
:=MW312
//发生错误时,会显示错误信息编号
:=MW314
//实际接收到的数据字节数
注意:LEN 设置为 65535 以接收可变长度数据。
在 PLC_2 中调用并配置“TCON”、“TSEND”、“TRCV”通讯指令 1.在 PLC_2 的 OB1 中调用“TCON”通讯指令
① 在第一个CPU中调用发送通讯命令,进入“树形”>“PLC_2”>“ ”>“OB1”主程序,从右侧窗口“”>“”>“OPEN User”命令调用“TCON”创建连接,如图 15 所示。
图 15. 调用“TCON”通讯命令
② 创建DB2并分配连接参数,如图16
图 16. 创建连接数据块 DB2()
③ 定义PLC_2的连接参数“TCON”
PLC_1的TCON指令的连接参数需要在该指令下方的属性窗口“>”>“”中设置,如图17所示。
图 17. 定义 TCON 连接参数
连接参数说明:
终点
:可以通过单击选择按钮来选择伙伴 CPU:PLC_2
类型
:选择通讯协议为TCP(也可以选择ISO on TCP或UDP协议)
ID
:连接地址ID号。 该ID号将在后续编程中使用。
数据
:创建连接时生成的块。见图2
设置
:选择通讯伙伴 PLC_1 作为活动连接
:定义通讯伙伴的端口号为:2000; 如果选择ISO on TCP协议,则需要设置TSAP地址(ASCII形式)。 本地PLC_2可设置为“PLC2”,伙伴PLC_1可设置为“PLC1”。
2、在PLC_2中调用OB1中的“TRCV”通讯指令
接收PLC_1发送到PLC_2的100字节数据
① 创建并定义接收数据区DB块。
通过“树”>“PLC_2”>“添加新块”创建DB块,选择“数据块”创建DB块,选择符号寻址,点击“确定”按钮,定义接收数据区域作为 100 字节的数组。 如图18和图19所示。
图 18. 创建接收数据区 DB 块
图 19. 将接收区域定义为 100 字节的数组
② 定义调用“TRCV”的程序
图 20. TRCV 模块参数配置
参数配置:
输入接口参数:
EN_R
:= 正确
//准备接收数据
ID
:= 1
// 建立连接并保持连接
伦
:= 100
//接收到的数据长度为100字节
数据
:= P#DB4.DBX0.0 字节 100
//接收数据区,DB块使用符号寻址
输出接口参数:
完毕
:= M310.0
// 任务执行完成且无错误,该位设置为1
忙碌的
:= M310.1
// 该位为1,表示任务未完成,无法激活新任务。
错误
:= M310.2
// 通讯过程中发生错误,该位置置1
:=MW312
//当发生错误时,会显示错误信息编号
:=MW314
//实际接收到的数据字节数
3、在PLC_2中调用并配置“TSEND”通讯指令
PLC_2将向PLC_1发送100字节的数据。 如何创建发送数据块DB3与创建接收数据块的方法相同,不再详细描述。 调用发送命令并配置PLC_2中的块参数。 发送命令和接收命令使用相同的连接,如图 21 所示。
图 21. 调用 TSEND 指令并配置块接口参数
参数说明:
输入接口参数:
要求
:= M0.3
//使用2Hz时钟脉冲,在上升沿激活发送任务
ID
:= 1
// 连接ID号,通过TCON创建的连接
伦
:= 100
//发送数据长度为100字节
数据
:= P#DB3.DBX0.0 字节 100
//发送数据区的符号地址
输出接口参数:
完毕
:M300.0
// 任务执行完成且无错误,该位设置为1
忙碌的
:M300.1
// 该位为1,表示任务未完成,无法激活新任务。
错误
:M300.2
// 通讯过程中发生错误,该位置置1
:MW302
//当发生错误时,会显示错误信息编号
下载硬件配置和程序并监控通信结果
下载两个CPU中的所有硬件配置和程序。 从监控表中可以看出,PLC_1的TSEND指令发送数据:“66”、“55”、“44”数据,PLC_2接收数据:“66”、“55”、“44”。 PLC_2发送数据“11”、“22”、“33”,PLC_1接收数据“11”、“22”、“33”,如图22所示。
图 22. PLC_1 和 PLC_2 监控表