两个西门子1200PLC进行TCP通讯,绝好的学习资料
S7-1200 和 S7-1200 之间 TCP 通信
S7-1200 与 S7-1200 之间的以太网通信可以通过 TCP 协议来实现,使用的通信指令是在双方 CPU 调用 T-block (TSEND_C,TRCV_C,TCON,TDISCON,TSEND,TRCV) 指令来实现。通信方式为双边通信,因此 TSEND 和 TRCV 必须成对出现。
硬件和软件需求及所完成的通信任务
硬件: ① S7-1200 CPU② PC(带以太网卡)③ TP电缆(以太网电缆)
软件: STEP7 V15 or Higher
所完成的通信任务: ① 将PLC_1 的通信数据区 DB3 块中的 100 个字节的数据发送到 PLC_2 的接收数据区 DB4 块中。② 将PLC_2 的通信数据区 DB3 块中的 100 个字节的数据发送到 PLC_1 的接收数据区 DB4 块中。
通信的编程,连接参数及通信参数的配置
1. 打开 STEP7 v15 软件并新建项目 在 STEP7 v15的 "Portal View" 中选择 "Create new project" 创建一个新项目
2. 添加硬件并命名PLC 然后进入 "Project view",在"Project tree" 下双击 "Add new device",在对话框中选择所使用的S7-1200 CPU添加到机架上,命名为 PLC_1,如图1所示。同样方法再添加通信伙伴的S7-1200 CPU ,命名为 PLC_2。
组态CPU
图1. 添加新设备
为了编程方便,使用 CPU 属性中定义的时钟位,定义方法如下:在 "Project tree" > "PLC_1" > "Device configuration" 中,选中 CPU ,然后在下面的属性窗口中,"Properties" > "System and clock memory" 下,将系统位定义在MB1,时钟位定义在MB0,如图2所示。时钟位我们主要使用 M0.3,它是以2Hz 的速率在0和1之间切换的一个位,可以使用它去自动激活发送任务。
重要提示
图2. 系统位与时钟位3. 为 PROFINET 通信口分配以太网地址 在 "Device View"中点击 CPU 上代表PROFINET 通信口的绿色小方块,在下方会出现PROFINET 接口的属性,在 "Ethernet addresses" 下分配IP 地址为 192.168.0.1 ,子网掩码为255.255.255.0,如图3. 所示。
IP地址
图3. 分配IP 地址
同样方法,在同一个项目里添加另一个新设备S7-1200 CPU 并为其分配 IP 地址为192.168.0.2
4. 创建 CPU之间的逻辑网络连接 在项目树 "Project tree">"Devices & Networks" >"Networks view" 视图下,创建两个设备的连接。用鼠标点中 PLC_1 上的PROFINET通信口的绿色小方框,然后拖拽出一条线,到另外一个PLC_2 上的PROFINET通信口上,松开鼠标,连接就建立起来了,如图4所示。
组态网络
图4. 建立两个 CPU的逻辑连接
在 PLC_1 中调用并配置"TCON"、"TSEND"、"TRCV" 通信指令
1.在 PLC_1 的 OB1 中调用"TCON" 通信指令
① 在第一个 CPU 中调用发送通信指令,进入 "Project tree" > " PLC_1" > "Program blocks" > "OB1" 主程序中,从右侧窗口 "Instructions" > "Communications" > "OPEN User Communications"下调用 "TCON" 指令,创建连接,如图5所示。
TCON指令
图5. 调用"TCON"通信指令
② 创建DB2 分配连接参数,见图6所示
创建数据块
图6. 创建连接数据块 DB2(Con_DB)
③ 定义PLC_1的 "TCON"连接参数PLC_1 的 TCON 指令的连接参数需要在指令下方的属性窗口"Properties"> "Configuration">"Connection parameter"中设置,如图7所示。
网络组态
图7. 定义 TCON 连接参数连接参数说明:
2.定义 PLC_1 的"TSEND"发送通信块接口参数
① 调用 "TSEND" 在OB1内调用 发送100个字节数据到PLC2中进入 "Project tree" > " PLC_1" > "Program blocks" > "OB1" 主程序中,从右侧窗口 "Instructions" > "Communications" > "OPEN User Communications"下调用 "TSEND" 指令,如图8所示。
TSENT指令
图8. 调用 TSEND② 创建并定义PLC_1的发送数据区 DB 块。通过"Project tree">"PLC_1">"Program blocks">"Add new block",选择"Data block" 创建 DB 块,选择绝对寻址,点击"OK"键,定义发送数据区为 100个字节的数组,如图9及图10所示。
创建数据块
图9. 创建发送数据区 DB 块注意:对于双边编程通信的 CPU ,如果通信数据区使用 DB 块,既可以将 DB 块定义成符号寻址,也可以定义成绝对寻址。使用指针寻址方式,必须创建绝对寻址的 DB 块。
创建绝对寻址的数据块
图10. 定义发送数据区为字节类型的数组 图 PLC1_TSENDC_DATA
③ 定义 PLC_1 的"TSEND"发送通信块接口参数,如图11所示。
TSENT指令
图11. 定义 TSEND 接口参数参数说明:输入接口参数:
输出接口参数:
3.在 PLC_1 的OB1中调用接收指令T_RCV 并配置基本参数
为了实现 PLC_1 接收来自 PLC_2 的数据,则在 PLC_1 中调用接收指令T_RCV 并配置基本参数。
① 创建并定义PLC_1的接收数据区 DB 块。通过"Project tree">"PLC_1">"Program blocks">"Add new block",选择"Data block" 创建 DB 块,选择绝对寻址,点击"OK"键,定义发送数据区为 100个字节的数组,如图12及图13所示。
创建T_recv数据块
图12. 创建接收数据区 DB 块注意:对于双边编程通信的 CPU ,如果通信数据区使用 DB 块,既可以将 DB 块定义成符号寻址,也可以定义成绝对寻址。使用指针寻址方式,必须创建绝对寻址的 DB 块。
图13. 定义接收数据区为字节类型的数组
② 调用 "TRCV" 在OB1内调用进入 "Project tree" > " PLC_1" > "Program blocks" > "OB1" 主程序中,从右侧窗口 "Instructions" > "Communications" > "OPEN User Communications"下调用 "TRCV" 指令,配置接口参数,如图14所示。
TRCV指令
图14. 调用 TRCV 指令并配置接口参数
参数说明:输入接口参数:
输出接口参数:
注意:LEN设置为 65535 可以接收变长数据。
在 PLC_2 中调用并配置"TCON"、"TSEND"、"TRCV" 通信指令
1.在 PLC_2 的 OB1 中调用"TCON" 通信指令
① 在第一个 CPU 中调用发送通信指令,进入 "Project tree" > " PLC_2" > "Program blocks" > "OB1" 主程序中,从右侧窗口 "Instructions" > "Communications" > "OPEN User Communications"下调用 "TCON" 指令,创建连接,如图15所示。
TCON指令
图15. 调用"TCON"通信指令
② 创建DB2 分配连接参数,见图16所示
创建数据块
图16. 创建连接数据块 DB2(Con_DB)
③ 定义 PLC_2的 连接参数 "TCON"PLC_1 的 TCON 指令的连接参数需要在指令下方的属性窗口"Properties"> "Configuration">"Connection parameter"中设置,如图17所示。
组态网络
图17. 定义 TCON 连接参数连接参数说明:
2. 在 PLC_2 中在OB1调用"TRCV"通信指令
接收从PLC_1 发送到 PLC_2的100个字节数据
① 创建并定义接收数据区 DB 块。通过"Project tree">" PLC_2">"Program blocks">"Add new block" ,选择 "Data block"创建 DB 块,选择符号寻址,点击"OK"键,定义接收数据区为 100 个字节的数组,图18及图19所示。
TRCV数据块
图18. 创建接收数据区 DB 块
创建数据块
图19. 定义接收区为 100 个字节的数组② 定义调用 "TRCV" 程序
TRCV指令
图20. TRCV 块参数配置参数配置:输入接口参数:
输出接口参数:
3. 在 PLC_2 中调用并配置"TSEND"通信指令
PLC_2 将 发送100个字节数据 到 PLC_1 中,如何创建发送数据块DB3,与创建接收数据块方法相同,不再详述。在 PLC_2 中调用发送指令并配置块参数,发送指令与接收指令使用同一个连接,如图21所示。
TSEND指令
图21. 调用TSEND 指令并配置块接口参数参数说明:输入接口参数:
输出接口参数:
下载硬件组态及程序并监控通信结果
下载两个 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 的监控表
浅谈PLC通信中的TCPIP的连接和断开
在PLC通信中,TCP/IP是大家普遍选择的协议,因为它是开放的以太网协议,不仅仅在西门子内部的设备之间可以使用,也可以在与第三方的设备之间进行广泛的通信。其中原因还包含TCP/IP是面向连接的,可靠的通信服务协议。
对于面向连接,表示通信是需要建立连接的,那么必然会对应断开连接,早期的300/400PLC我们会在NetPro中进行组态TCP的连接,这属于静态链接,不能通过程序断开TCP/IP的连接。而对于新的PN CPU,例如S7-1500CPU,则可以使用T_CON和T_DISCON分别来动态的建立和断开连接,实现灵活的TCP通信。
使用T_CON建立连接就是TCP通信的3次握手,通过Wireshark抓包是可以看见三次握手的过程,但这是大家看到的外在表象,实际上通过T_CON是先建立了TCP的通信资源,然后通过该通信资源与对方建立三次握手的连接。下图的wireshark中的1507,1509,以及1510是TCP的3次握手过程,在这三次握手中,通信双方协商了Widow Size和MSS的大小,即滑动窗口和TCP的最大分节长度。PLC中的TCP/IP的三次握手与标准的TCP/IP协议的三次握手形式相同。
使用T_DISCON程序功能块是用于断开连接的,然而与标准的TCP/IP通信的4次挥手是不同的,本质上是报文中的标志字段标志位不同,标准的TCP/IP的4次挥手字段标志位使用FIN,即Finish用来结束此连接,但是资源没有释放。而PLC中TCP的断开连接,并不是真的用于断开连接,而是释放通信资源,真正的逻辑是因为释放资源,所以连接断开。所以这和标准的TCP的4次挥手完全不同,而是使用字段标志位RST,即Reset来释放连接资源。通过Wireshark抓包来观察断开连接的过程。上图中的1797,是客户端使用T_DISCON的断开连接的过程,客户端通知服务器已释放该TCP的通信资源,连接断开。
下图中的2012,是服务器端使用T_DISCON的断开连接的过程,通知客户端已释放该TCP的通信资源,连接断开。2089,2197表示客户端尝试继续与服务器建立连接,然而服务器通知客户端,2198通信资源释放,连接断开。
那么为什么断开连接,PLC不能参考标准TCP的4次挥手呢?我想原因有两点,第一点是资源释放,有利于灵活的编程,例如,PLC A与其中一台PLC B断开连接,资源释放,利用释放的资源,与PLC C建立连接进行通信;第二点就是标准的4次挥手期间,数据仍然是可以交互的,对于工业环境来说,数据安全是有要求的,所以使用释放资源的方式,防止连接断开继续有数据交互,避免不必要的编程错误。
想要学习更多工业知识,欢迎访问西门子1847工业学习平台 ,这是一个官方的学习平台,能够帮助您高效获得实用和权威的资料。
1847首页-技术视频免费看-西门子工业“1847会员”–西门子中国
另外,这里还有60场西门子1847工业专家会议 等您来参与!点击下方链接查看会议详情。
2022西门子1847工业专家会议 | 60场直播,工业人的年度技术盛典
相关问答
西门子PLC如何添加TCP连接?
要添加TCP连接到西门子PLC,首先需要在PLC编程软件中创建一个新的TCP连接模块,然后配置连接参数,包括目标IP地址、端口号等。接着在程序中使用该TCP连接模块来...
plc通信tcp端口怎么设置?
位机开发中三菱PLC如果要走MC协议,是不需要额外编程的,但是需要做一些简单的配置。1.在右侧工程栏中双击PLC参数;2、在弹框中选择内置以太网端口设置,设置I...
plc如何与触摸屏tcp通讯?
PLC与触摸屏TCP通讯的方法如下:确认触摸屏的接口类型,下载对应的驱动程序。在触摸屏上新建一个画面,设置好PLC的IP地址。连接触摸屏的接口,下载触摸屏程序...
如何监控三菱PLCmodbusTCP通讯?
用三菱PLC监控modbusTCP通讯要从三菱PLC与modbus通讯两个方面去研究。第一,三菱以FX5U系列PLC自带串口、内置modbus通讯协议,这样我们就可以很方便的同第三...
1500PLC支持modbusTcpip通讯吗?
是的,1500PLC支持ModbusTCP/IP通信。1.1500PLC支持ModbusTCP/IP通信。2.原因:Modbus是一种常用的通信协议,可以用于实现PLC与其他设备的通信。...
如果两个1200plc的地址一样能进行tcp通讯嘛?
两个1200plc地址一样并不能直接进行TCP通讯。TCP通讯需要基于IP地址进行,而PLC地址是Ladder程序中设定的一个变量地址或寄存器地址,其表示的是在PLC内部的数据...
敢问大家,河南plc控制柜200smartTCP通信的常见问题解决方法...
[回答]河南plc控制柜西门子S7-200SMARTPLC程序中RS:RS(复位优先双稳态触发器)是一种复位优先锁存器。如果置位(S)和复位(R1)信号均为真,则输出(OUT)为假。...
西门子PLC控制柜西门子200smartTCP通信问题解决方法哪些知道...
[回答]西门子PLC控制柜例如200smartTCPIP地址不能设置为:(1)任何广播IP地址(例如,255.255.255.255)(2)任何多播地址(3)本地CPU的IP地址这点我们需要特别注...
西门子300PLC与温控表怎样连接通讯?
西门子300PLC与温控表怎样连接通讯?现在工业控制系统中,PLC做主站与各种智能仪表通讯是比较普遍的,遇到较多的就是利用温度表进行PID控制方式。通常有两种方...
plc编程软件如何与CPU交互?
1,PLC与PC间连网线2,给plc上电3,打开step7-micro、winsmart4,双击屏区左区项目下CPU,选CPUSR40,出现系统块,IP192.168.2.1,子网俺码2...