保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

基于USB总线的机器人上下位机通信


ature和SetQ
  
  
  
  uickLinkFeature用于控制两台主机通信时PL-2301的握手信号。这些握手信号是:
  
  (1)TX_RDY指示本地USB端口是否准备好传输数据的指示信号。
  
  (2)S_EN挂起使能信号。置位后,PL-2301支持标准的USB挂起特性。
  
  (3)RESET_O块输出管道的复位信号,用于出现错误时复位块输出通道。
  
  (4)RESET_IN块输入管道的复位信号,用于出现错误时复位块输入管道。
  
  (5)TX_REQ块传输的请求信号。
  
  (6)TX_C块传输完成的指示信号。
  
  (7)PEER_E告诉对方本地端口是否连接好的指示信号。
  
  在这几个握手信号的协调下,上位机和下位机可以双向通信。图2是主机PCA向PCB传输数据的流程图。这些底层的细节问题并不需要控制,由PL-2301的驱动程序完成。
  
  图3教学机器人控制系统软件结构
  
  3软件结构
  
  3.1教学机器人软件结构
  
  EDUROBOT-680-II型教学机器人控制系统的控制软件包括下位机的底层控制软件和上位机的上层控制软件,它们通过USB端口通信。其软件结构如图3所示。
  
  上层控制软件运行在Windows98平台上,它为用户提供与机器人交互的人机接口界面,完成复杂运动控制的数据处理和插补计算。它由人机界面、运算插补、主控、通信四大模块构成。通信模块能够实时地发送控制命令给下位机并从下位机获得反馈信息,同时保证数据传输的准确性。
  
  为了提供对USB的支持(为了使底层控制系统有更好的实时性和更紧凑,下一步准备将底层控制系统改用支持USB的WindowsCE、VxWorks或嵌入式Linux),底层控制系统目前采用Windows98平台。底层控制软件接口收上层控制软件的控制命令,同时解释并执行控制命令。这通过多线程实现。任务调度和管理模块是底层控制软件的主线程,它负责从指令队列中取出指令并解释执行。主线程执行过程会产生一个辅助线程——通信线程。通信线程调用通信模块的输出函数,负责监视USB端口。如果上位机传来控制命令,则遵循教学机器人通信协议接收并存入指令队列中。
  
  3.2通信模块的实现
  
  上位机和下位机控制软件共用相同的PL-2301客户驱动程序、传输模块(由Prolific公司提供)和通信模块。
  
  PL-2301客户驱动程序是典型的WDM驱动程序。驱动程序屏蔽了底层的硬件细节和USB协议,使上层软件仅通过驱动程序接口函数就可以访问PL-2301。主要的几个驱动程序接口函数是CreateFile()、WriteFile()、ReadFile()、DeviceIOControl()。
  
  传输模块(Transfer.dll)是驱动程序的上层模块,它通过调用驱动程序接口函数,实现了两台主机通过PL-2301通信的基本通信能力。Transfer.dll会产生一列三个线程:
  
  (1)发送线程。这个线程对发送请求进行排队并按先后顺序处理请求。如果出现错误,则努力恢复。
  
  (2)接收线程。这个线程等待来自状态线程的消息,如果发现对方主机将要传输数据,就按照传输协议接收数据。接收线程把接收到的数据放在接收FIFO缓冲器中,等待上层软件(Comm.dll)取走。如果有错误发生时,也会努力恢复。
  
  (3)状态线程。这个线程监视PL-2301的状态信号。如果发现有任何状态改变,它将给相关线程发消息或调用回调函数通知上层软件。
  
  Transfer.dll提供几个供上层软件(Comm.dll)调用的输出函数:
  
  ·USB_InitService()调用Transfer.dll里的其他输出函数之间必须先调用这个函数。
  
  ·USB_OpenConnect()调用此函数获得PL-2301的句柄。发送和接收数据时要用到这个句柄。
  
  ·USB_WriteConnect()调用此函数向对方主机发送指定的数据。
  
  ·USB_ReadConnect()调用此函数从接收FIFO缓冲器中读取数据。
  
  通信模块(Comm.dll)通过调用Transfer.dll提供的输出函数完成教学机器人控制命令的发送和接收。为了协调命令的发送和接收,定义了套控制字,作为上位机与下位机通信时的握手信号(与PL-2301的握手信号没有联系)。上位机发送数据(控制命令或控制字)时,直接调用USB-WriteConnect()即可。下位机读取数据采取轮询方式,循环调用USB-ReadConnect()扫描USB端口,如果有数据则接收下来。如果接收到的是指令,则放入指令队列中,等待任务管理和调度线程取走。图4
  
  
  

《基于USB总线的机器人上下位机通信(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/165393.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。