当前位置:首页 > 新型工业化 >西门子1200通讯指令(西门子s7 1200 指令详解)

西门子1200通讯指令(西门子s7 1200 指令详解)

指令概述

S7-1200有两套点对点通信指令,如图1所示。

西门子1200通讯指令(西门子s7 1200 指令详解)

图1 指令列表

上述两组指令集的区别如下:

指令集适用范围PtP CommunicationS7-1200 中央机架CPU 版本=V4.1.1,CM1241 版本=V2.1,TIA PORTAL 版本=V13SP1,CB1241 无版本要求分布式IOCPU 版本=V4.1.1,ET200SP/ET200MP 分布式IO 串口端口模块点对点S7-1200 中央机架CPU、TIA PORTAL、CM1241、CB1241 无版本限制。建议使用PtP通讯指令集的指令,因为该指令兼容S7-1500,并且指令版本已更新,点击该点指令集将不再更新,建议仅升级旧版本项目。

指令说明

对于图2中的指令,这些是用于在线修改串口模块硬件配置的指令,例如在线修改波特率、在线修改接收条件等。一般情况下没有必要使用它。具体使用请参考TIA PORTAL帮助或S7-1200系统手册。

图2 配置说明

对于图3中的指令,这些是硬流控操作的指令,通过信号设置来激活相关的接收和发送。除非使用硬流控,否则没有必要使用。具体使用请参考TIA PORTAL帮助或S7-1200系统手册。

图3 流控指令

对于图4中的指令,这些是用于实现一些扩展功能的指令,例如与第三方设备的非标准MODBUS通信。合作伙伴不需要CRC验证。您可以使用该指令禁用MODBUS CRC。

一般情况下没有必要使用它。具体使用请参考TIA PORTAL帮助或S7-1200系统手册。

图4 扩展功能

对于图5 中的指令,这些是用于清除通信模块接收缓冲区的指令。

图5 清除缓冲区

一般情况下对于自由口通信,只使用如图6所示的发送和接收指令。

图6 发送和接收

图7 发送命令

Send_P2PSEND_PTPEN 已启用。建议始终打开REQ 来发送触发信号。使用边沿触发PORT串口硬件模块标识符,可以在PLC变量表中找到,如图9所示。BUFFER发送区一般采用P#指针形式、String类型或WString类型、字符数组等。如果使用String类型或者WString类型,对方在接收的时候是看不到字符串前面的最大长度和实际长度的,也就是说相当于发送了一个字符数组。 LENGTH 实际发送的字节数。如果为0,则全部发送。 PCTRL——无意义。 DONE 发送数据到通讯模块,发送缓冲完成。将有一个扫描周期设置ERROR 来发送错误。将设置一个扫描周期。 STATUS 通常显示状态代码。如果发生错误,则ERROR 为1 期间将显示错误信息(16#8xxx)。

图8 接收指令

当Receive_P2PRCV_PTPEN 为True 时,如果通信模块的接收缓冲区中有数据,则会发送到BUFFER 使能。建议始终打开EN_R——为True 时,如果通信模块的接收缓冲区中有数据,则会发送到BUFFERPORT 串口硬件。模块标识符可以在PLC变量表中找到,如图9所示。BUFFER接收区一般采用P#指针形式、String类型或WString类型、字符数组等。如果采用String类型或WString类型,即使伙伴发送的是字符数组,指令也会将最大长度和实际长度添加到字符数组中,成为字符串。 NDR 将通信模块接收缓冲区中的数据接收到BUFFER 后完成,并设置为一个扫描周期。如果EN_R 为True,则通信模块接收缓冲区中的数据被接收到BUFFER 中,并设置为一个扫描周期。

如果EN_R 为False,则当通信模块的接收缓冲区中有数据时,NDR 将始终为True。如果出现ERROR 指令错误,则会有一个扫描周期,其中STATUS 会被置位,并且通常会显示状态代码。发生错误时,ERROR 为1 时会显示错误信息(16# 8xxx) LENGTH 接收完成后,会有一个扫描周期显示接收到的字节数。如果通信模块接收缓冲区包含已接收n 次的数据,则Receive_P2P EN/RCV_PTP EN_R 需要在n 个扫描周期内为True 才能接收。直到BUFFER完成。

一般建议Receive_P2P EN/RCV_PTP EN_R 一直打开或打开一段时间,而不是使用边沿触发,这样一旦通信模块接收缓冲区接收到新数据,就可以立即接收到BUFFER 中。

如果可能的话,可以将接收指令放在循环OB中并尽快调用。

图9 系统常数

选择CPU中PLC变量表默认变量表

选择系统常数

找到相关的串口模块。建议直接将模块名称复制到PORT中。

发送命令、发送完成位、发送错误位、发送错误代码

下面分为点对点指令和PtP通讯指令。

图10 点对点发送相关指令

图10 PtP通信发送相关命令

程序段1:触发发送

程序段2:发送完成位触发全局变量自增1。每次完成时,变量都会增加一个数字。通过该方法可以检测发送是否完成。

程序段3:发送错误位触发MOVE指令。当发送错误到达时,该方法将STATUS变量移至全Word类型全局变量,并且发送错误代码将保存在该变量中。

接收命令、接收完成位、接收错误位、接收错误代码、接收长度

下面分为点对点指令和PtP通讯指令。

图12 点对点接收相关指令

图13 PtP通信接收相关指令

程序段4:触发接收

程序段5:接收完成位触发全局变量加1。每次完成时,变量都会增加一个数字。该方法可用于检测接收是否完成。同时,通过MOVE指令将length变量移动到UInt类型的全局变量中。接收到的长度将保存到该变量中

程序段6:接收错误位触发MOVE指令。当接收错误到来时,通过该方法将STATUS变量移动到Word类型的全局变量中,并且接收错误代码将保存在该变量中。

轮询编程

沟通任务:

1号站的S7-1200使用CB1241来发送和接收点对点指令。

Station 2的S7-1200使用ET200SP分布式IO的CMPTP模块,并使用PtP通信指令进行发送和接收。

站1 发送字符串“Siemens”,站2 发送字符串“极其深刻”。

注:本例中,1 号站先发送,2 号站先接收。实际情况根据需要而定。对于PLC来说,先发送或者先接收都可以。

示例中使用系统内存FirstScan,激活方法如图14所示。

图14 设置系统内存

进入CPU的设备视图

在Properties General下选择系统和时钟存储器

激活并启用系统内存字节,默认MB1

FirstScan变量,默认为M1.0

图15 显示了站点1 的轮询:

图15 站1 轮询

使用系统内存“FirstScan”激活首次传输

发送DONE位接收请求并复位发送请求

触发接收

接收NDR位设置发送请求,复位接收请求

触发下一次发送

图16 显示了站点2 的轮询:

图16 站2 轮询

使用系统内存“FirstScan”激活首次接收

接收到的NDR 位的上升沿置位接收请求并复位发送请求。

触发发送

发送DONE位接收请求并复位发送请求。

触发下一次接收

沟通结果:

图17 通讯结果

常见问题

如何处理字符串、字符数组等的发送和接收?

考虑到PLC通常通过空闲口与第三方通信,通信内容通常是字符串,但西门子的SIMATIC String或WString包含最大长度和实际长度,第三方字符串为Char数组或WChar数组。

基于此点对点和PtP通信命令集,对字符串和字符数组的发送和接收进行了优化,即:

第三方合作伙伴发送一个字符数组。如果PLC的接收指令BUFFER类型是字符数组,则作为字符数组接收。如果BUFFER 类型是字符串,则将其作为字符串接收。接收指令自动补全字符串的最大长度和实际长度。

第三方合作伙伴接收字符数组。如果PLC的发送指令BUFFER类型是字符数组,则发送字符数组。如果BUFFER类型是字符串,则还发送字符数组。发送指令自动去掉字符串的最大长度和实际长度。

简单来说,PLC会以字符数组的形式进行发送和接收。如果发送或接收的BUFFER是字符串,则会进行相应的转换。以上述轮询为例,见图18和图19。

图18 将Station 2的发送接收区域的String类型修改为Char数组

图19 发送和接收结果

可以知道,1号站发送字符串‘123’,2号站接收到一个字符数组,分别为‘1’、‘2’、‘3’。 2号站发送一个字符数组,每个字符为‘a’、‘b’、‘c’,1号站接收一串‘abc’。

审稿人:刘庆

最新资讯

推荐资讯