图4(a)显示的是服务器端运行之后的界面。服务器端是该程序的核心端,所有客户端的数据都将传输到服务器端,客户端之间通信需要通过服务器端进行中转。而本文所设计的程序中的服务器端不仅可以实现以广播的形式向所有连接到该服务器的客户端发送信息,还可以以单对单通信的方式向单个的客户端进行通信。在图 4(a)中就显示了服务器端分别利用这两种方式进行了通信。点击界面中的发送按钮就采取广播式发送信息,而点击界面中的1和2两个按钮则是对特定客户端发送数据。
本文设计的程序可以支持多个不同的
(a)
(b)
(c)
图4 通信平台运行界面
客户端和服务器进行连接并通信。图4(b)显示的是IP为“192.168.0.106”的客户端和服务器建立连接之后的通信,而图4(c)则是IP为“192.168.0.110”的客户端和服务器通信的界面。
3 实验性能分析
1.时延和数据的丢失问题
机器人遥操作要求数据传输要具备可靠性和次序性,TCP协议提供了可靠而有序的传输,基于这一特性,可以在传输过程中使用超时重传、分段、重组等检错纠错策略,通过这些检错纠错策略可以保证在数据传输过程中的可靠性和有序性,可以有效的防止数据的丢失。
机器人远端遥操作控制的采用并不意味着实时控制作用被上移到网络,实时控制依然由现场的控制单元来完成,而网络遥操作更关注的是对现场信息的监视和管理以及对机器人的非实时控制,所以TCP通信在传输过程中存在的时延问题也就显得影响不大。
2.数据共享问题及其解决方案
由于本文中程序是多任务多线程的,当多个客户端同时连接到服务器时,多任务、多线程就极易造成数据共享问题。数据共享问题可以解释如下:假定有多个函数(或者ISR、任务)共享一个变量,如果在某一时刻存在对该变量的数值的操作,并且在对其施加操作的的过程中,仅有部分操作完成,还有一部分没有完成,若在此时产生一个中断,如果此时还有另一个函数也在共享该变量,且前面的操作已经完成,该变量的数值可能与预期的不同。因此,当一个函数与另一个函数共享某变量时,所调用的ISR或者另一个函数都有可能改变此变量,是变量的数值发生变化,在返回时此变量的新数值将从堆栈转载到四个寄存器中,未完成的操作将按照寄存器中的新数值执行,程序就会发生错误。
在本文中,利用了以下措施消除了程序中由共享数据问题所导致的错误。
1) 对于从中断返回的变量,在声明中使用了volatile。此声明可以警告编译器,这些变量是可更改的。
2)在中断之前将完全执行的部分中对原子指令使用可再生函数,此部分叫临界段。
3) 将共享的变量放入循环队列中。需要使用该变量数值的函数总是从队列的前端将其删除。而另一些写入该变量的数值的函数总是从队列的末端进行操作。
4)在临界段开始执行之前通过使用信号量来关闭中断,在其完成之时打开中断。
4 结论
本文设计了一种基于TCP协议的网络通信平台,通过该平台可以实现远程客户机与本地服务器之间的信息通信,而且保证了数据传输的可靠性和次序性,对机器人的遥操作提供了可靠的网络通信条件。
网络通信平台的建立,扩大了对机器人操作的远程化距离,而且该平台具有架构容易,低成本,维护便利等优点,对机器人遥操作领域的技术进步将会起到帮助作用。