S7-1200 PLC 技术参考 v3.9

S7-1200 CPU 与S7-300 CP UDP通信

S7-1200 与 S7-300 CP 之间的以太网通信可以通过 UDP 协议来实现,使用的通信指令是在S7-1200 CPU 侧调用 T-block ( TCON, TDISCON, TUSEND, TURCV) 指令,在 S7-300 CPU 侧调用 AG-SEND, AG-RECV 指令来实现。

硬件和软件需求及所完成的通信任务

所需条件:

① S7-1200/S7-300 CP343-1设备

② STEP7 V11

软件:

STEP7 V11 or Higher

所完成的通信任务:

① S7-1200 CPU 将通讯数据区 DB4 块中的 10 个字节的数据发送到 S7-300 CPU 的接收数据区 DB4 块中。

② S7-300 CPU 将通讯数据区 DB10 块中的 10 个字节的数据发送到 S7-1200 CPU 的接收数据区 DB10 块中。

S7-1200 侧通信的编程,连接参数及通信参数的配置

1.使用 STEP7 V11 软件新建一个项目并完成硬件配置

在 STEP7 V11 的 “Portal 视图” 中选择 “创建新项目” 创建一个新项目。

2.添加硬件并命名PLC

然后进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-1200 CPU 添加到机架上,命名为 1200-AC,如图1所示。

图1. 添加新设备

为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:

在 “项目树” > “1200-AC” > “设备组态” 中,选中 CPU ,然后在下面的属性窗口中,“属性” > “系统和时钟存储器” 下,将系统位定义在 MB1,时钟位定义在 MB0,如图2所示。

时钟位我们主要使用 M0.3,它是以 2Hz 的频率在 0 和 1 之间切换的一个位,可以使用它去自动激活发送任务。

图2. 系统位与时钟位

3.为 PROFINET 通信口分配以太网地址

在 “设备视图”中点击 CPU 上代表 PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “以太网地址” 下分配 IP 地址为 192.168.0.123 ,子网掩码为255.255.255.0,如图3所示。

图3. 分配IP 地址

4.在 S7-1200 中调用并配置“TCON”、“TUSEND”、“TURCV” 通信指令

① 在 S7-1200 CPU 中调用发送通信指令,进入 “项目树” > “ 1200-AC” > “程序块” > “OB1” 主程序中,从右侧窗口 “指令” > “通讯” > “开放式用户通信”下调用 “TCON” 指令,创建连接,如图4所示。

图4. 调用 TCON 通信指令

② 定义 S7-1200 的 “TCON”连接参数

S7-1200 的 “TCON”指令的连接参数需要在指令下方的属性窗口“属性”> “组态”>“连接参数中”中设置,如图5所示。

图5. 定义 TCON 连接参数

连接参数说明:

端点

:可以通过点击选择按钮选择“未指定” ;

连接类型

:选择通信协议为 UDP;

连接 ID 

:连接的地址 ID 号,这个 ID 号在后面的编程里会用到;

连接数据

:点击新建自动生成该数据块;

主动建立连接

:此功能在UDP连接时,不能选择;

地址详细信息 

:定义本地通信的端口号为:2001。 

③创建并定义 S7-1200 的发送数据区 DB4 块

通过“项目树”>“1200-AC”>“程序块”>“添加新块”,选择“数据块” 创建 DB4 块,选择“标准-与S7-300/400 兼容”,点击“确定”键,定义发送数据区为 9001 个字节的数组,如图6所示,结果如图7所示。

图6. 创建发送数据区 DB 块

图7. 定义发送数据区为字节类型的数组 9001 字节

④ 定义 UDP 连接参数数据块

通过“项目树”>“1200-AC”>“程序块”>“添加新块”,选择“数据块” 创建 DB 块,然后在右侧“类型”中选择“TADDR_Param”,如图8所示。

图8. 创建 UDP 连接参数数据块

创建完 DB 块后,可以在 DB 块内,设置通讯伙伴的IP地址与端口号(如对方 300 CPU 的 IP:192.168.0.22,端口号:2001),如图9所示。

图9. UDP 连接详细参数

⑤调用 “TUSEND” 在 OB1 内调用 发送 10 个字节数据到 300 CPU 中

进入 “项目树” > “1200-AC” > “程序块” > “OB1 ” 主程序中,从右侧窗口 “指令” > “通讯” > “开放式用户通信”下调用 “TUSEND” 指令,配置接口参数,如图10所示。

图10. 定义 TUSEND 接口参数

参数说明:

输入接口参数:

REQ  

:= %M0.3

// 使用 2Hz 的时钟脉冲,上升沿激活发送任务;

ID

: = 2

// 创建连接 ID;

LEN

:= 10

// 发送数据长度;

DATA 

:= P#DB4.DBX0.0 BYTE 10

// 发送数据区的数据,使用指针寻址时,DB 块要选用绝对寻址;

ADDR

: = %DB13

// UDP 通讯伙伴的连接参数,包括对方 IP 地址及端口;

输出接口参数:

DONE

:= %M204.1

// 任务执行完成并且没有错误,该位置 1;

BUSY 

:= %M204.2

// 该位为 1,代表任务未完成,不能激活新任务;

ERROR   

:= %M204.3

// 通信过程中有错误发生,该位置 1;

STATUS

:= %MW206

// 有错误发生时,会显示错位信息号。

⑥创建并定义 S7-1200 的接收数据区 DB10 块。

通过“项目树”>“1200-AC”>“程序块”>“添加新块”,选择“数据块” 创建 DB10 块,选择“标准-与S7-300/400 兼容”,点击“确定”键,定义接收数据区为 10 个字节的数组,如图11所示,结果如图12所示。

图11. 创建接收数据区 DB10 块

图12. 定义接收数据区为字节类型的数组

⑦将 “TURCV” 在 OB1 内调用

进入 “项目树” > “1200-AC” > “程序块” > “OB1 ” 主程序中,从右侧窗口 “指令” > “通讯” > “开放式用户通信”下调用 “TURCV” 指令,配置接口参数,如图13所示。

图13. 调用 TURCV 指令并配置接口参数

参数说明:

输入接口参数:

EN_R

:= M220.0

// 准备好接收数据 M220.0=TRUE;

ID

:= 2

// 连接号,使用的是 TCON 的连接参数中 ID号;

LEN

:= 10

// 接收数据长度为 10 个字节;

DATA

:= P#DB10.DBX0.0 BYTE 10

// 接收数据区的地址;

ADDR

: = %DB13

// UDP通讯伙伴的连接参数,包括对方IP地址及端口;

输出接口参数:

NDR

:= %M220.1

// 该位为 1,接收任务成功完成;

BUSY

:= %M220.2

// 该位为 1,代表任务未完成,不能激活新任务;

ERROR

:= %M220.3

// 通信过程中有错误发生,该位置 1;

STATUS

:= %MW222

// 有错误发生时,会显示错误信息号;

RCVD_LEN  

:= %MW224

// 实际接收数据的字节数。

配置完连接并编译存盘。

S7-300侧通信的编程,连接参数及通信参数的配置,测试结果

1.使用 STEP7 V11 软件添加新设备并命名300+CP

然后进入 “项目视图”,在“项目树” 下双击 “添加新设备”,在对话框中选择所使用的 S7-300 CPU 添加到机架上,命名为 300+CP,如图14所示。

图14. 添加新设备

2.使用 STEP7 V11 软件配制硬件组态

进入 “300+CP”,在“Project tree” 下双击 “Device configuration”,在对话框中选择所使用的 S7-300 CP 通讯卡添加到机架上,如图15所示。

图15. 组态CP卡

为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:

在 “Project tree” > “300+CP” > “Device configuration” 中,选中 CPU ,然后在下面的属性窗口中,“Properties” > “clock memory” 下将时钟位定义为 MB0,如图16所示。

时钟位我们主要使用 M0.3,它是以2Hz 的频率在 0 和 1 之间切换的一个位,可以使用它去自动激活发送任务。

图16. 系统位与时钟位

3.为PROFINET通信口分配以太网地址

在 “Device View”中点击 CP 设备 上代表PROFINET 通信口的绿色小方块,在下方会出现 PROFINET 接口的属性,在 “Ethernet addresses” 下分配IP 地址为 192.168.0.22 ,子网掩码为255.255.255.0,如图17所示。

图17. 分配IP 地址

4.创建 CPU的逻辑网络连接

在项目树 “Project tree”>“Devices & Networks” >“Networks view” 视图下,创建两个设备的连接。用鼠标点中300+CP 上 CP343-1 的 PROFINET 通信口的绿色小方框,然后拖拽出一条线,到与之通信的另外一个 PLC (这里为CPU 1214C 的 PROFINET 通信口上,松开鼠标,连接就建立起来了,如图18所示。

图18. 建立两个 CPU 的逻辑连接

5. 网络组态

打开 “Network View” 配置网络,选中 CPU,然后选中 “Connection” 在连接列表里建立新的连接并选择连接对象和通信协议,如图19所示。

图19. 创建新的连接并选择 UDP 协议

点击确定,配置连接伙伴的 IP 地址, 如图20所示。

图20. 详细通讯参数

配置完连接并编译存盘。

S7-300 CPU 的 UDP 通信的编程

1.软件编程

在OB1中,从“Instruction”>“Communication processor”>“Simatic NET CP”下,调用 AG_RECV、AG_SEND 通信指令。创建接收和发送数据块 DB4 和 DB10,定义成20个字节的数组。 如图21~22所示。

图21. 调用AG_RCV

图22. 调用 AG_SEND

CALL “ AG_RECV”

//调用 AG_RECV

ID

:=2

// 连接号,要与连接配置列表中一致,

LADDR

:=W#16#100

//CP 的地址,要与配置中一致,见图10

RECV  

:=P#DB4.DBX 0.0 BYTE 10

//接收数据区

NDR

:=%M10.0

//为1时,接收到新数据

ERROR

:=%M10.1

//为1时,有故障发生

STATUS

:=%MW12

//状态代码

LEN

:=%MW14

//接收到的实际数据长度

CALL “AG_SEND”

//调用 AG_SEND

ACT  

:=%M0.3

//使用 2Hz 的时钟脉冲,上升沿激活发送任务

ID

:=2

// 连接号,要与连接配置中一致

LADDR

:=W#16#100

//CP 的地址,要与配置中一致见图10

SEND

:=P#DB10.DBX0.0 BYTE 10

//发送数据区

LEN

:=10

//发送数据的长度

DONE

:=%M20.1

//为1时,发送完成

ERROR

:=%M20.2

//为1时,有故障发生

STATUS

:=%MW22

//状态代码

注意:AG_SEND/AG_RECV 管用 LADDER 定义为 CP 卡硬件地址,需要转换成16进制数据使用如图23。

图23. CP 卡地址

下载硬件组态及程序并监控通信结果

下载两个 CPU 中的所有硬件组态及程序,实现 两个 CPU 之间数据交换,监控结果如图24所示

图24.在线监控通信数据交换