自动化控制系统中多现场总线兼容性问题探讨 ——以太网和现场总线的互连(五)
5仿真实验5.1仿真内容
在网络技术上,以太网的最低两层,物理层和数据链路层已经和网络接口卡紧密结合在一起,TCP/IP协议在局域网的使用也很常见,这两部分都是相当成熟的技术。现在的各种PLC都可以直接与Ethernet相连接,几乎所有远程I/O接口技术的供应商均提供一个支持TCP/IP的以太网接口,并且很多FCS系统都在向Ethernet靠拢,将功能规划到TCP/IP协议中。因此实验主要仿真用以太网来作为现场总线,运用隧道技术来建立以太网和现场总线之间的互连通讯。
仿真试验具体内容:
[*] 管理器与节点通过以太网总线建立起连接;
[*] 管理器通过发送各种命令对节点进行参数设置;
[*] 进行网络变量的查询;
[*] 能对节点的运行状况进行监控;
[*] 发送由大量数据组成的报文到节点以检测以太网总线实时性;
[*]
5.2仿真环境
网络环境:100BASE-TX以太网系统,是目前使用最广泛的100M以太网系统,使用两对非屏蔽双绞线,其中一对用来接收数据信号,另一对用来发送数据信号。在双绞线上以100Mbps的速度发送以太网帧。
计算机硬件:普通PC机,PCI以太网接口卡
软件环境:Windows 2000操作系统,仿真实验程序采用BCB进行编程,在一台计算机上运行以太网现场总线管理应用程序作为服务器,其他的计算机则运行现场总线节点程序仿真现场总线节点。
5.3仿真模型
下图为管理器与节点间的数据流,管理器至节点的数据包括设置命令、输入网络变量和报文。节点将自身的输出网络变量值发送至管理器。
5.4用Socket实现以太网上的数据接收和发送
当数据从现场总线上接收下来后,需要作为路由器的计算机通过以太网接口卡在以太网上广播;路由器还需要监听以太网,看是否有数据需要发送给现场总线。这个数据发送和接收的工作,都可以通过Socket来非常方便的实现。这里仿真管理器与节点两端均采用Winsock组件进行通信。
5.4.1 Socket简介
Socket是U.C.Berkeley大学开发的用于BSD Unix下网络通讯的编程接口。它规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接。应用程序调用Socket的API实现相互之间的通讯。Socket又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图5.2.
在通讯中,套接字(Sockets)是处理数据发送和接收的基础。一个套接字是通讯的一端,在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接字都有它的类型和与其相关的进程。套接字存在于通讯域中。通讯域是为了处理一般的线程通过套接字通讯而引起的一种抽象概念,套接字通常和同一个域中的套接字交换数据(数据交换业可能穿越域的界限,但这是一定要执行某种解释程序)。Windows Sockets规范支持单一的通讯域,即Internet域。各种进程用这个域互相之间用Internet协议族来进行通讯。
套接字可以根据通讯性质分类:这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间通讯。不过只要底层的通讯协议允许,不同类型的套接字间也照样可以通讯。
用户目前可以使用两种套接字,即流套接字和数据报套接字。流套接字提供了双向的、有序的、无重复并且无记录边界的数据流服务,数据报套接字支持双向的数据流,但并不保证是可靠的、有序的、无重复的。也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复了,或者和发出的顺序不同。数据报套接字的一个重要特点是它保留了记录边界。
5.4.2 C/S-客户机/服务器模型
一个在建立分布式应用最常见的范例便是客户机/服务器模型。在此模型中,客户应用程序向服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通讯时的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供或被接受,这个惯例包含了一套协议,它必须在通讯的两头都被实现,协议可能是对称或非对称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。无论协议是对称或非对称的,当服务被提供时必然存在“客户进程”和“服务进程”。
一个服务程序通常在一个众所周知的地址监听对服务的请求,即服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。此时,服务程序开始为客户提供服务——对客户的请求做出适当的反应。
数据报套接字接口可以用来向网络发送广播数据包。要实现这种功能,网络本身必须支持广播功能,因为系统软件并不提供对广播功能的任何模拟。广播信息将会给网络造成极重的负担,因为它们要求网络上的每台主机都为它们服务,所以发送广播数据包的能力被限制于那些用显示标记了允许广播的套接口中。广播通常是为了如下两个原因而使用的:
1、一个应用程序希望在本地网络中找到一个资源,而应用程序对该资源的地址没有任何先验的知识。
2、一些重要的功能,例如路由要求把它们的信息发送给所有可以找到的邻机。
被广播消息的目的地址取决于这一信息将在何种网络上广播。Internet域中支持一个速记地址用于广播——INADDR_BROADCASE.由于使用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口。
由于数据报套接字是面向无连接的,所以服务器一般都是面向事务处理的,一个请求一个应答就完成了客户程序与服务程序之间的相互作用。程序流程如图5.3.
5.4.3 Windows Socket组件
Windows Socket组件让你建立一个利用TCP/IP和有关的协议与其它系统进行通信的应用。使用Sockets,你能够读写通过它连接的其他机器,而不用担心实际的网络软件的相关细节。Sockets提供基于TCP/IP协议的连接。除此以外还能很好的工作在其他相关的协议,例如Xerox Network System(XNS),Digital's DEC net或Novell's IPX/SPX家族。
C++ Builder提供两个Socket组件,客户端Sockets和服务器Sockets.它们允许你的网络应用构成连接其它的机器并允许你通过这个连接来读写信息。与每个Socket组件相关联的是Windows Socket对象,它们在终端的作用是一个实际的Socket连接。Socket组件使用Windows Socket对象去封装Windows Socket API调用,所以你不用去关心连接建立的细节或管理Socket信息。
1.使用客户端Sockets
添加一个客户端Socket控件(TClientSocket)到你的form或data module使你的应用成为一个TCP/IP客户。客户Sockets允许你指定想连接的服务器Socket和希望服务器提供的服务。一旦你描述想得到的连接,你可以使用客户Socket组件去完成连接服务。
每个客户Socket组件使用独立的客户Windows Socket对象(TClientWinSocket)
去应答连接中的客户终端。使用客户Sockets可以:
A.指定想得到的服务
B.建立与服务器的连接
C.取得关于连接的信息
D.关闭连接
2.使用服务器Sockets
添加一个服务端Socket组件(TServerSocket)到你的form或data module使你的应用成为一个TCP/IP服务器。服务器Sockets允许你指定想提供的服务或想用来监听客户请求时使用的端口。可以使用服务器Socket组件去监听和允许客户连接请求。每个服务器Socket组件使用一个单一的服务器Windows Socket Object(TServerWinSocket)去应答在服务器端监听到的连接。它通常使用一个服务器客户Windows Socket Object(TServerClientWinSocket)来应答服务器端每个活动的,连接着得到允许服务的客户Socket.使用服务器Sockets可以:
A.指定监听的端口
B.监听客户请求
C.连接到客户端。
D.取得关于连接的信息。
E.关闭连接
页:
[1]