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 | : = �13 | // 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 | : = �13 | // 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. 在线监控通信数据交换