1 引言
SIEMENS S7工业通讯网络能满足宽范围的不同性能和应用要求,能在工厂的不同部门,不同自动化站以及通过不同的级进行数据交换。因此,国内愈来愈多的行业如冶金、电力、轻纺、啤酒、烟草等行业均采用其产品。西门子工控产品在我国有着很高的市场占有率,它的通信及网络产品有着引导世界工控技术潮流的作用,研究西门子工控产品及通讯技术的实际应用问题有着广泛普遍的重要意义。
以太网是当前最为广泛的计算机网络技术。首先,它有广泛的技术支持,已经成为网络通讯领域事实上的标准,因此我们对以太网技术很熟悉,可以降低系统开发、培训及其维护费用;再者,以太网可以达到很高的通讯速率,所以利用以太网的这些优点,结合PLC控制器,就可以构筑全分散、全开放的工业控制系统,当前很多厂家提供把PLC和以太网相结合的产品,如西门子公司的PLC产品系列[1]。西门子提供的强大的工业以太网解决方案就是针对大数据量交换以及实时性要求比较高的网络环境的一种高级网络应用,IT技术的应用体现了以太网发展的新趋势,同时也为工业以太网的发展提供了更为广阔的空间。
2 工业以太网
2.1 工业以太网简介
所谓工业以太网,一般来讲是指技术上与商用以太网(即IEEE802.3标准)兼容,但在产品设计时,在材质的选用、产品的强度、适用性以及实时性、可互操作性、可靠性、抗干扰性和本质安全等方面能满足工业现场要求。
2.2 阻碍以太网在工业环境中应用的技术问题逐步得到解决
以太网是为信息网络而设计的,并没有考虑适用于工业环境的要求,特别是采用CSMA/CD对共享媒体进行访问控制信息传送时间存在不确定性,并且没有优先级,无法满足工业控制的实时性要求。然而近年来以太网标准的进步使得阻碍以太网在工业环境中应用的难题逐步得到解决[2]。具体表现在:
1)以太网的通讯速率一再提高,为以太网进入控制领域奠定了基础。对于同样的通信量通讯速率的提高意味着网络负荷的减轻,时间确定性的提高。10Mbps的以太网传送1518字节需要时间不大于1.2毫秒,而1000Mbps的以太网只要12微妙,在以太网上传输多媒体信息要求时延不大于20-30毫秒。随着百兆网(100Mbps)和千兆网(1Gbps)的普遍使用,现在万兆网(10Gbps)业已问世,万兆网的标准IEEE802.3ae已于2003年6月18日正式颁布。IEEE关于以太网实时能力的标准IEEE802.1D/P以及关于交换式以太网技术的标准IEEE802.1Q早再1998年底就得到验证。
2)由于终端设备和交换机端口间可采用全双工通信线路,以及交换机内部多对端口之间的并行交换,因此全双工交换式以太网彻底摆脱了CSMA/CD的限制,克服了因CSMA/CD导致的确定性和实时性差的缺点,消除了以太网用于工控领域的最大障碍。交换式以太网具有传输带宽高,网络容量大,组网方便,低交换延时等优点,可满足一般实时控制的需要。同时交换式网络可支持虚拟局域网,从而降低组网成本,并提高网络灵活性。
3)以太网电缆由早期的粗同轴电缆、细同轴电缆发展到现在的双绞线电缆、光缆,大大提高了网络的传输距离和抗干扰能力。
3 SIMATIC NET工业控制网络
3.1 SIMATIC NET简介
SIEMENS公司1998年推出的SIMATIC NET是按照IEEE802.3、IEEE802.3u以太网标准设计,支持10Mbps、100Mbps传输速率的一种工业控制网络。SIMATIC NET能以最高100Mbps的传输速率实现PLC之间以及PLC和智能设备(PC、处理器)之间的数据通信。并通过TCP/IP协议,特别是SMTP(简单邮件传输协议)用于E-Mail和HTTP(超文本传输协议)用于访问Web浏览器,实现工业控制与信息网络系统的集成[3]。SIMATIC NET是全集成自动化系统的一个重要组成部分,为完整的工业通信提供网络和部件。它主要由工业以太网、PROFIBUS、AS-I、MPI多点接口和点对点接口构成。
SIMATIC NET提供三个层次的网络通信,即IT通信、数据通信、过程或现场通信。IT通信通过工业以太网将SIMATIC集成到现场的办公自动化环境内;数据通信实现自动化设备之间或自动化设备和智能设备(PC、处理器)之间的数据交换;过程和现场通信用来将执行器和传感器连接到自动化系统。SIMATIC NET 提供同轴网络、双绞线网络、光纤网络三种网络,并为每种网络形式提供了完备的网络部件。
3.2 SIMATIC NET工业以太网
SIMATIC NET工业以太网是用于大型集散控制系统的高速网络系统,最高通信速率可达100Mbps,通讯距离为1.5Km(同轴电缆)或4.5Km(光纤)网络可连接多于1000个节点。它是基于IEEE802.3的工业标准总线系统,采用CSMA介质访问控制协议。节点之间通过连接方式进行数据传输,由主动站建立连接,被动站加以确认。PG/PC和PLC之间可建立无穷多个连接,而每个PLC最多可建立16个PLC-PLC连接。每一个连接最多一次可发送240个字节;传送的数据为:I/O地址,中间寄存器和DB数据块。可按位、字节、字、双字等方式读写。
工业以太网由独立的网段组成,每个网段最多500m,最多可连接100个站点,网段之间用中继器连接。两站之间最多接两个中继器,构成1000米得远程中继站。每个数据终端设备DTE通过耦合器连接到网上,DTE可以是工作站PC和编程器PG,S7、S5、M7等系列得PLC设备,以及其他支持ISO传输的非西门子系统。网络通讯接口设备为自带CPU的CP(通讯处理器)模块,在它的固件中固化了ISO参考模型的1到7层协议。CP完成所有的通讯任务,可大大减轻DTE的CPU负担。S7-300一般采用CP343-1板,S7-400一般采用CP443-1板。PC/PG上一般装有网卡CP1613,也可以用CP1413、CP1511、CP1411。
3.3 S7通讯
S7通讯是SIMATIC S7 PLC之间得最佳化通讯协议,它也允许用户通过S7协议连接PC和工作站。每个作业的用户的最大用户数据量可到64K(中等到大型的数据量)。可以被MPI、PROFIBUS和工业以太网所支持,是西门子公司开发的基于应用层的一个协议。S7通讯提供了简明、强有力的通讯服务和与网络无关的用户接口,用于工业以太网、PROFIBUS和MPI。需要安装SIMATIC Net软件,目前最新版本是V6.2。
4 数据通讯的实现
S7通信协议不公开,管理计算机和调试计算机上第三方软件编制的程序如何实现PC机与西门子S7 300/400 PLC之间的信息通讯是个棘手的问题。为了允许PC机和工作站上的应用程序与西门子S7系列产品进行S7通讯,西门子公司提供了一个SAPI-S7应用程序接口,通过它可以灵活而方便地跟西门子S7系列产品进行通信。安装SIMATIC Ner软件后,会在系统system32目录下生成一个s732.dll文件,该动态链接库提供了大量基于WindowsNT、Window95/98、Windows3.11和MS-DOS的函数,这样就使得用户解决PLC和PC机的数据交换和数据处理问题变为可能。通信编程包括两个部分:(1)CP连接组态(2)PLC与上位机通信编程。
4.1 CP连接组态
可采用step7软件或step7软件中用于工业以太网的NCMS7软件对CP进行网络组态。通讯处理器CP可连接PC,PC/PG上一般装网卡CP1613。在Windows控制面板下的“set PC/PG”下安装所用网卡驱动程序,并设协议、站号、波特率、是否为主站,完成对VFDs(Virtual Field Device)和S7 connections的配置[4]。
4.2 PLC和上位机的通讯编程
S7-300/400PLC有以下各类资源:①输入点I:接收外部开关量信号 ②输出点Q:输出给外部的开关量信号 ③内部辅助点M:存放所需中间结果 ④时间继电器T ⑤计数器 ⑥数据块DB:存放程序数据的存储区域 ⑦外设输入PI:主要接收模拟量输入信号经A/D转换⑧外设输出PQ:给出模拟两输出值[5]。要读/写这些资源,首先要建立PLC和PC机的连接。
4.2.1 初始化与PLC的连接
SAPI-S7应用程序接口提供的管理服务模块(Administrative Services)提供了一些可供读出配置信息和登录/退出通讯系统的函数,下面作一些简要介绍[6]:
Ø s7_get_device() :通过此函数,用户程序可以查询所有已安装的CP的CP名。
Ø s7_get_vfd() :通过此函数,用户程序可以查询任一指定CP的所有已配置的VFD。
Ø s7_init():通过此函数,用户程序可登录通讯系统。
Ø s7_get_cref() :此函数提供了一个指向所选S7 connection名的指针。
Ø s7_get_conn():此函数返回已登录VFD的所有S7 connection名和指向他们的指针。
Ø s7_shut():通过此函数,用户程序可退出通讯系统。
一个应用程序可以登录一个或多个CP的若干个VFD,只有当应用程序登录CP及其所选的VFD,在配置期间指定给该VFD的所有连接才是有效的。
4.2.2读/写PLC内部资源
初始化与PLC的连接成功后,就可以对PLC进行读写操作。对PLC存储区即数据块DB的读写是实现监控的最基本操作。SAPI-S7应用程序接口提供的变量服务模块(Variable Services)提供了一些读写函数,由于篇幅有限,现选一些经常用到的函数作一些简单介绍。
Ø s7_cycl_read():此函数通知服务方准备对单存储单元循环读一个变量。
Ø s7_get_cycl_read_ind():此函数接收来自服务方发送的数据。
Ø s7_multiple_read_req():此函数通知服务方准备对多存储单元读一个或多个变量。
Ø s7_get_multiple_read_cnf():此函数接收来自服务方的一个或多个变量的值。
Ø s7_multiple_write_req():此函数通知服务方准备对多存储单元写一个或多个变量。
Ø s7_get_multiple_write_cnf():此函数接收来来自服务方的执行上述写请求的结果。
需要特别注意的是:S7 300/400PLC遵循“高地址、低字节”的规律,这与某些习惯用法不同。例如在C++Builder6中,变量类型为word的变量,它的数据存放顺序是“低地址,低字节”的规律。因此在对所读取的数据进行操作或给PLC数据块中写数据字时要进行相应的处理。
为解决上位机不能因前台的信息处理而中断后台的监听等问题,可采用多线程编程技术,将对PLC内部资源的读/写功能模块交给一个后台线程来完成。多线程编程技术能提高CPU利用率,加快信息处理,提高系统的实时性,在由多台计算机组成的分布式实时控制系统中应用多线程技术是完全必要的。
4.2.3 后台读/写线程模块部分代码
·····
do
{
ret = s7_receive(cp_descr,&cref,&orderid);
switch(ret)
{
case S7_NO_MSG:
break;
case S7_INITIATE_CNF:
Synchronize(my_get_initiate_cnf);
Synchronize(my_multiple_read_req);
break;
case S7_MULTIPLE_READ_CNF:
Synchronize(my_get_multiple_read_cnf);
Synchronize(my_multiple_read_req);
break;
·
·
case S7_ABORT_IND:
Synchronize(my_get_abort_ind);
break;
case S7_VFD_STATE_CNF:
Synchronize(my_get_vfd_state_cnf);
Synchronize(my_abort);
break;
case S7_VFD_USTATE_IND:
Synchronize(my_get_vfd_ustate_ind);
break;
default :
·····
}
}while(ret != last_event_expected)
5 总结
运用C++Builder6.0编写的PLC控制调试程序,具有用户界面友好,人机交互方便,数据库功能强大灵活的特点,具有较强的通用性和实用性。通过调用S7通讯提供的SAPI-S7应用程序接口实现PC机与S7300/400PLC基于工业以太网的数据通讯,不仅数据传输率快,而且数据传输正确率高。在对PLC控制系统的调试过程中大大缩短了调试周期,提高了工作效率。此通讯技术的实现对西门子工控产品的应用以及工业以太网的推广应用有着广泛普遍的重要意义。