2.2 电动执行机构和以太网转串口模块通讯的实现
串行通讯采用TTL电平,占用两个I/O口,即输入口(RxD)和输出口(TxD),执行机构主控板需要提供+5V电源给以太网转串口模块,硬件连接如图2所示。
图2 底层通讯的实现原理图
本系统中执行机构所采用的主控芯片为Intel 80C196MC。图中P2.0作为80C196MC的串行输出,P2.1作为80C196MC的串行输入。网卡地线应和主控制板的数字地即单片机的地连接。80C196MC与以太网转串口模块之间采用异步通信,一帧长度为10位,包含8位数据,1位奇偶校验位和1位结束位。
3 软件部分的实现
本系统采用基于VC++6.0的WinSock编程。套接字(Socket)已经成为当今最流行的网络通信应用程序接口。套接字最初由加利福利亚大Berkeley分校为Unix操作系统开发的网络通信接口, 后来它又被移植到DOS与Windows 系统,特别是近几年互联网在全世界范围内的广泛普及, 进一步奠定了它在网络通信程序开发领域的主宰地位。
系统采用Client/Server模式。通过以太网转串口模块的配置软件,将该模块设置成服务器模式,而主控计算机上的控制软件部分为客户端,每次启动由主控计算机主动连接执行机构。客户端和服务器采用面向连接的通信协议:控制计算机和模块之间会建立一个虚拟连接,这个连接一旦建立,客户端和服务器之间就可以把数据当作一个双向字节流进行交换;如果连接建立不成功,则不会发送数据。另外,面向连接传输的每一个报文都需要接收端确认,未确认报文被认为是出错的报文。
3.1 通信过程
Socket有同步阻塞方式和异步非阻塞方式两种使用,本系统应用程序中创建了继承于CAsyncSocket类的TestSocket类,它是一个异步非阻塞Socket封装类。
由于已经将以太网转串口模块设置为服务器模式,所以,主控计算机段的程序是作为客户端出现的,该程序的编写大致按照以下步骤进行:
1) 首先调用WSAStartup函数来初始化套接字库。
2) 调用socket函数来创建一个套接字。
3) 调用connect函数连接服务器,发出连接请求
4) 服务器响应连接请求后,与服务器开始进行交互操作(接收、发送数据等),直到请求结束。
5) 调用closesocket关闭套接字,释放套接字资源。
6) 调用WSACleanup函数释放相应资源。
客户端程序与服务器的通信过程如图3所示:
图3:面向连接服务的socket调用模型
在以太网转串口模块中,服务器程序调用listen函数将此socket置于监听状态,让这个socket对进来的连接进行监听并确认连接请求。当服务器端监听到来自客户端的连接请求后,一个正在监听的socket将给将给每个请求发送一个确认信息,然后调用accept函数,接着,面向连接的客户通过调用connect函数启动网络对话。在客户端和服务器端建立连接以后,双方就可以通过send和recv或其它面向连接的Socket API函数进行网络通信了。
3.2 通信协议
计算机和以太网转串口模块之间用SOCKET进行通信,模块和执行机构之间则采用TTL电平通信,采用统一的通信协议。计算机为主动通讯设备,即所有的对话均由控制计算机发起,执行机构只是被动的应答命令。
协议中信息帧主要分为两种:数据帧与命令帧。它实现一般信息通信功能。数据帧包含一般的I/O信息,而命令帧则包含控制、查询及设置等命令。为保证信息传送的准确性,每条命令必须进行校验(校验和1),如果命令后有命令参数的话,要再次校验(校验和2)。执行机构返回的信息也要校验。校验的方法可采用逐字节异或的方式。