计在网口与串口通信软件设计中要实现网口与串口透明传输通信2功能首先要定义如表1网口帧和串口帧格式。
服务器端的网口和客户端的网口都以网络帧数据来通信网络帧包含IP头、TCP头和若干串口帧数据。
由于服务器端的台式电脑可能要使用多个串口控制嵌入式设备同时也无法确定所有的投影机串口设置因不同厂家生产投影机的串口波特率、效验位、数据位、停止位等都不一致。
所以串口帧除了串口数据N位外还需要在串口数据前加串口号1位、图2 Windows服务应用程序开发过程串口设置1位。
为了编程方便设定统一串口帧长度那么不够长度以填充位为0来补齐。
在网络帧最大长度允许情况下可以一个网络帧包含若干个串口帧各个串口帧以串口帧头和串口帧尾区分开。
113 网口与串口通信软件设计由图2可知基于Windows窗口界面的网络与串口通信程序设计采用C/S模型3。
台式电脑的服务器端和远程客户端都首先要建立通信网络套接字Socket对象4并通过这个套接字进行网络通信。
1NET210提供的SerialPort串口组件完成与外接嵌入式设备的串口数据信号转发并由1NET210提供的EventLog日志组件实现网口与串口通信的Windows服务应用程序后台日志记录。
开发用户主要精力放在网口与串口通信程序的监控和运行其中OnStart函数调用的网口与串口通信程序为Windows窗口界面的DLL文件实际上在Windows服务程序框架运行时已经隐藏了窗口界面成为了后台运行的服务器程序。
现提供如图3所示的网口与串口通信主程序设计流程。
在网口与串口通信程序的服务器端的DLL程序里首先建立新的Socket对象使用bind6705科 学 技 术 与 工 程8卷2012-05-182012-05-182012-05-182012-05-182012-05-182012-05-18图3 网口与串口通信主程序设计流程函数绑定本地台式电脑的IP地址和协议端口通过listenn函数监听该协议端口其中n表示可以监听最多的网络连接数。
为了提高计算机的运行效率采用非阻塞异步Socket编程使用Begi2nAccept方法监听网络连接同时计算机还可以进行其他工作。
在使用异步Socket编程时每个Begin方法都有一个匹配的End方法。
1NET提供了一种称为AsyncCallback的委托该委托允许启动异步的功能并且在异步功能结束后执行委托提供的方法。
那么在委托提供的方法中调用End方法结束操作即BeginAccept对应的是EndAc2cept函数完成连接的请求。
当程序执行到Be2ginAccept方法时不会停下来等待客户端连接而是继续往下执行同时BeginAccept方法也继续运行。
一旦BeginAccept方法接收到新的客户端连接AsyncCallBack委托会自动调用AcceptConnection方法。
在AcceptConnection方法中获得BeginAccept方法返回的状态信息并调用EndAccept方法完成接收请求。
然后服务器程序又创建新的Socket对象原Socket对象继续监听连接新的Socket对象就可以与客户端进行网络通信了。
服务器和远程客户端建立连接后就可以发送和接收网络帧数据了。
在异步网络套接字中使用BeginSend方法开始发送网络帧数据使用BeginReceive方法接收网络帧数据并以EndReceive方法完成接收网络帧数据。
当网络套接字准备好发送的网络帧数据时会自动调用SendData方法。
在SendData方法中调用EndSend方法完成本次发送。
EndSend方法用于完成网络帧数据的发送并返回成功发送的字节数。
服务器端的Windows服务程序一旦接收到客户端发来的网络帧控制信号后就解析出串口帧数据。
按串口帧数据格式使用本地相应得串口资源转发到外接设备如投影机等并接收外界设备的返回信号。
使用SerialPort串口组件提供的RS232串口来进行串行通信VC2005为该控件提供了标准的事件处理函数、过程并通过属性和方法提供了串行通信的设置。
它使用户能够方便地访问Windows串行通信驱动程序的大多数特性包括输入、输出缓冲区的大小及决定何时使用流控制命令挂起数据传输等。
服务器端Socket对象收到网络帧数据后解析出串口帧并读出串口号和串口设置根据串口号初始化SerialPort串口组件如波特率、停止位、数据长度、握手连接等。
以SerialPort组件的Open方法打开相应的串口把从网络数据解析出的串口数据以SerialPort组件的Write方法发送出去去控制外接设备的相应动作然后侦听正使用的串口资