首页 理论教育 如何使用S7实现基本通信?

如何使用S7实现基本通信?

时间:2023-06-28 理论教育 版权反馈
【摘要】:S7-300/400的S7基本通信服务通过调用系统功能和不需要组态的S7连接进行数据交换,只能用于MPI网络。S7基本通信的SFC集成在CPU的操作系统中,并用SFC提供用户程序的软件接口。S7基本通信不能与其他子网中的站进行通信。用于S7基本通信的SFC可以在所有的S7-300/400 CPU上运行。表9-2 用于S7基本通信的SFC3.需要双方编程的S7基本通信S7基本通信不用组态静态连接。

如何使用S7实现基本通信?

S7-300/400的S7基本通信服务通过调用系统功能(SFC)和不需要组态的S7连接进行数据交换,只能用于MPI网络。这些SFC可以访问S7-200/300/400中的数据,发送最多76B的数据给MPI网络中的S7 PLC、HMI或PC。S7基本通信的SFC集成在CPU的操作系统中,并用SFC提供用户程序的软件接口。S7基本通信不能与其他子网中的站进行通信。

1.不需要组态的连接

PG(编程器)通信和S7基本通信不需要对连接组态,这种连接称为动态连接。通过SFC65~SFC68的参数,指定通信伙伴的地址和触发通信的信号,并确定完成数据传输后该连接是继续保持或终止。

在同一时刻,一个不需要组态的连接只能用于一个通信伙伴,与不同的通信伙伴的连接可以一个接一个地建立和终止。完成与某一通信伙伴的数据传输后,可以连接其他通信伙伴,因此可以相继访问的通信伙伴的数量不受连接资源的限制。但是CPU同时建立的连接总数不能超过限制值。由于在通信过程中必须考虑连接的建立和断开,因此降低了网络的数据传输能力。CPU进入STOP模式时,所有已建立的连接被终止。

2.用于S7基本通信的系统功能

S7基本通信的系统功能(SFC)分为两类:

1)I_GET与I_PUT(见表9-2)用于CPU与同一个S7站的其他有通信功能的模块之间交换数据。SFC名称中的“I”表示内部。

2)X_SEND、X_RCV、X_GET与X_PUT用于S7 CPU与其他具有通信功能的模块之间交换数据,通信伙伴在同一个MPI子网内,但是不在同一个站内。块的名称中的“X”表示外部。用于S7基本通信的SFC可以在所有的S7-300/400 CPU上运行。

表9-2 用于S7基本通信的SFC

978-7-111-53570-6-Chapter09-8.jpg

3.需要双方编程的S7基本通信

S7基本通信不用组态静态连接。随书光盘中的例程“MPI_UC_1”用S7基本通信在两台CPU 315-2DP之间交换数据,将它们的DB1中76B的数据发送到对方的DB2。在STEP 7中创建一个项目,生成两个站,CPU均为CPU 315-2 DP(见图9-6),将它们连接到MPI网络上,它们的MPI站地址分别为2和3。通信的双方都需要调用通信块,一方调用X_SEND来发送数据,另一方调用X_RCV来接收数据。这种通信方式适用于S7-300/400之间的通信。

978-7-111-53570-6-Chapter09-9.jpg

图9-6 SIMATIC管理器

如果在OB1中调用SFC65“X_SEND”,发送的频率太快,将加重CPU的负荷,因此在OB35中调用SFC65,每隔一定的时间间隔(默认值为100ms)调用一次SFC65。

下面是2号站的OB35中的程序:

程序段1:准备要发送的数据

978-7-111-53570-6-Chapter09-10.jpg

程序段2:通过MPI发送数据

978-7-111-53570-6-Chapter09-11.jpg

下面是2号站的OB1中接收数据的程序

程序段1:从MPI接收数据

978-7-111-53570-6-Chapter09-12.jpg

978-7-111-53570-6-Chapter09-13.jpg

程序段2:断开连接(www.xing528.com)

978-7-111-53570-6-Chapter09-14.jpg

3号站的程序与2号站的相同,只是将SFC中的DEST_ID由W#16#3改为W#16#2。

在2号站的初始化程序OB100中调用SFC21,将存放发送数据的DB1的各个字预置为16#2222,将接收数据的DB2的各个字清零。3号站的OB100基本上相同,区别在于将DB1的各个字预置为16#3333。

在运行时用变量表监视通信双方接收的DB2的3个字(见图9-7)。用变量表修改M1.0、M0.0和M0.2的值,来控制数据的发送、接收和断开连接。发送使能位M1.0和对方的接收使能位M0.0必须同时为1状态,才能传送数据。

在每100ms执行一次的OB35中,将发送的第1个字DB1.DBW0加1。在运行时同时打开两个站的变量表,可以看到通信双方接收到的DB2.DBW0的值不断增大。

978-7-111-53570-6-Chapter09-15.jpg

图9-73 号站的变量表

因为SFC65的参数CONT(Continue,继续)为1(TRUE),即使发送请求位M1.0变为0状态,连接仍然保持。可以通过置位M0.2来使能SFC69,断开已建立的连接。断开连接后,可以看到接收到的DB2.DBW0停止变化。

如果在调用SFC时令CONT为0,连接在数据传输完成后被终止,可以使用该连接来与一个新的通信伙伴交换数据。这种方式可以确保只是在实际使用时才占用连接资源。

本例因为每个站既要发送,也要接收,一共占用了两个连接。进入在线模式后,可以在CPU的模块信息对话框的“通讯”选项卡中,查看正在使用的S7基本通信的连接个数。

如果需要发送的数据超过76B,可以将数据分为若干个数据包来发送,即多次调用SFC65“X_SEND”。每次调用的接收方的MPI地址DEST_ID相同,但是数据包标识符REQ_ID不同。接收方调用SFC66“X_RCV”,根据接收到的数据包的标识符REQ_ID判别收到的是哪一包数据,并分别存放到不同的地址区(见参考文献[1])。

4.只需一个站编程的S7基本通信

除了上述的使用SFC65“X_SEND”和SFC66“X_RCV”的双向通信之外,还可以实现单向的S7基本通信。编写程序的一方的CPU是客户机,另一方作服务器,后者不需要编写程序。客户机是通信的主动方,服务器是被动方。在S7基本通信中,S7-300或S7-400都可以作客户机或服务器,S7-200只能作服务器。

在STEP 7中创建一个项目(见随书光盘中的例程MPI_UC_2),生成两个站,CPU 412-2DP作客户机,CPU 315-2DP作服务器。将它们连接到MPI网络上,它们的MPI站地址分别为2和3。在单向通信中,客户机调用SFC68“X_PUT”来写服务器中的系统地址区,调用SFC67“X_GET”来读取服务器中的数据。在读取服务器数据时,客户机首先要发送读取命令给客户机。为了保证发送读、写命令的时间间隔,在循环中断组织块OB35中调用SFC68“X_PUT”和SFC67“X_GET”。下面是客户机的OB35中的程序:

程序段1:准备要发送的数据

978-7-111-53570-6-Chapter09-16.jpg

程序段2:用SFC68写对方的数据区

978-7-111-53570-6-Chapter09-17.jpg

程序段3:用SFC67读对方的数据区

978-7-111-53570-6-Chapter09-18.jpg

程序段4:断开连接

978-7-111-53570-6-Chapter09-19.jpg

SFC69“X_ABORT”的参数REQ为1时,将会中断一个由SFC“X_SEND”“X_GET”或“X_PUT”建立的连接。如果上述SFC的工作已经完成(BUSY为0),调用SFC69“X_ABORT”后,通信双方的连接资源被释放。

OB100中的程序与项目MPI_UC_1的相同,调试程序的方法也与该项目基本上相同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈