从0开始学习S7-1200+ET200SP(3)——两台S7-1200通过TCP连接

3.1 硬件组态

(1) 添加新设备

选择设备型号,可以根据订货号唯一确认设备,可以更改设备名称,这里添加两台S7-1200 CPU 1215DC/DC/DC,命名为PLC1与PLC2:

在PLC的安全设置中取消选择保护机密的PLC组态数据,并且禁用访问控制:

(2) 网络视图、拓扑视图连接
(3) 可访问的设备

搜索可访问的设备:

点击显示,可以在在线访问中查看

(4) 编译与下载

将两台PLC分别改为:PLCmaster作为发送数据的主站,PLCsalver作为接受数据的从站。

修改一台后,点击设备,编译------下载

这里选择下载的目标设备,上面的组态访问节点是指我们组态的PLC,下面的目标类型是根据网线找到的设备。记得需要相同的IP地址才可以加载。加载成功后,实现名字的修改和设备的捆绑。

加载完成后,点击查看分配PROFINET设备的名称,已经分配成功:

同样的方法修改PLC_2,修改成功:

3.2 PLCmaster编程

为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:在 "项目树" > "PLC_1" > "设备组态" 中,选中 CPU ,然后在下面的属性窗口中,"属性" > "系统和时钟存储器" 下,将系统位定义在MB1,时钟位定义在MB0:

  1. 发送数据区DB

添加新块选择"数据块" 创建 DB 块,在DB块的属性->常规->属性中,取消勾选"优化的块访问",点击"确定"键:

注意:对于双边编程通信的 CPU ,如果通信数据区使用 DB 块,既可以将 DB 块定义成符号寻址,也可以定义成绝对寻址。使用指针寻址方式,必须创建绝对寻址的 DB 块:

需要在属性中取消勾选优化的块访问:

点击编译后,出现偏移量,就是每个变量在内存中的起始地址,单位是 字节. **位,**Int类型是2个字节:

  1. 调用TSEND_C指令

在PLC_master的OB1的主程序中调用 TSEND_C指令, 发送数据到PLC_slaver中,这个指令的含义是TSEND+TCON,所以就不用额外写TCON了。定义连接参数如下,谁是send,谁主动建立连接:

使能定义为系统时钟0.5Hz。上面启动了指针寻址,可以通过绝对地址寻址。DATA定义从DB2的DBX0.0开始发送10个字节,这里的长度可以大于数据区的字节长度,也可以小于字节区的数据长度:

3.3 PLCslaver编程

(1) 接收数据区DB

同样取消块优化,方便指针寻址:

(2) 调用Trcv_c指令

定义接受10个字节的数据,使能定义为系统时钟0.5Hz:

3.4 调试

全部下载编译后,两个设备都点击进入在线,并且启用监视:

可以修改sendDB中的数据:

在receive数据块中查看可以发现,由于int是两个字节,这里byte就是一个字节,所以receive3才是08,send4=15,已经处于第11个字节了,所以无法被发送出去。

相关推荐
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本2 天前
离散数学第六课
学习·离散数学
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
我爱cope3 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统