摘 要:本文设计了基于无线数据传输模块STR-6的数控机床状态实时
监控系统的硬件结构,介绍了数据传输所采用的时分多址通信协议和实时接收、处理数据的方法,完成了基于多线程技术的无线数据传输模块软件设计。
关键词:数控机床;无线通信;时分多址;多线程 在传统的CIMS(计算机集成制造系统)中,数据流的采集、传输涉及大量的
电缆铺设等问题,限制了分布式工业制造系统整体控制性能的提高。基于STR-6的无线传输模块能满足对于数控机床实时监控数据的稳定高效的传输要求。本文介绍了在此基础上设计的数控机床无线传输的硬件结构和软件设计,并对所采用的通信协议进行了详细分析。
系统结构和通信原理通信模块特点 上海桑博科技有限公司开发的STR-6型微功率无线传输模块提供了标准RS-232、RS-485和RART/TTL电平这3种接口方式,可直接与计算机COM1(或COM2)相连,利用计算机的USB接口供电。STR-6的通信信道是半双工的,最适合点对多点的通信方式,用户无需编制多余的程序,只要完成从接口收发数据即可,其它如空中收/发转换、控制操作等,STR-6模块能够自动完成。
系统硬件结构 系统的结构图如图1所示,整个系统由若干台高性能PC组成,分别为远程监控端(主机)、现场监控中心(从机)和现场监控单元,其中现场监控中心和远程监控端分别配置了STR-6模块。主机和从机通过RS-232串口与STR-6模块相连,两个STR-6模块(配置天线为30×7×1mm)之间进行通信。上行链路发送指令用于主机对从机以及现场监控单元进行控制,下行链路发送状态数据用于向主机传递数控机床当前的运行参数,如主轴转动和切削力等。STR-6模块提供0~7个信道,如果需要增加系统容量,可以设置多个频点,每个频点供多台数控机床使用,这样,通过增加系统频段资源的方法,可使系统容量成倍的增加。[align=center]
图1 数控机床状态监控系统硬件结构[/align]
时分多址通信协议 本系统采用TDMA时分多址通信协议。把时间轴划分成一定长的时元(EPOCH),每个时元又划分为若干个帧,每一个帧内部又划分为若干个时隙。帧的重复周期为帧周期, 在每个帧中给主机/从机分配一定数量的时隙以发射信号,而在不发射信号的时隙中则接收从机/主机所发射的信号。主机以准确的时钟为基准,从机时钟则与之同步,形成统一的系统时钟。 网内各个成员的发射时隙是彼此不同的,不存在相互干扰问题,但必须有准确的时隙同步,使每一次发射都以统一的时隙起点作定时基准。本系统测控容量为30台数传机床,数传模块的无线传输速率设置为9600bps,每个时隙的基本信息传输量为225bit,所以,设计为每个时隙35ms,每个时帧为3.5s,共有100个 时隙,每个时元35s,共10个帧。
通信模块的软件实现程序的整体框架 无线传输模块作为实时监控系统的一部分,在设计时就考虑要把它设计成一个独立的模块,使对它的应用类似函数的应用,本文采用Visual C + + 语言进行设计,在终端的无线通信模块程序中包括时戳类、编码类、网络通信类(或传输类) 。时戳类主要完成整个系统的同步,编码类主要实现数据的R-S编码功能。 网络通信类主要是负责编码后数据流的发送和接收。数据链终端模块主要包含如下线程: 1 主线程 主线程的主要任务是对系统进行初始化,创建子线程和结束子线程,并响应菜单和鼠标操作。 2 编解码线程 从主机/从机获得数据,进行编码,并将编码后的数据送入发送缓冲等待发送;从接收缓冲取得数据进行解码,得到有效信息。 3 传输线程 负责把发送缓冲的数据送入数传模块调制解调器;从调制解调器读入数据流,并存入接收缓冲区。
Windows下精确定时的实现 TDMA网络是一种同步网络,要求整个网络的所有用户都采用统一的时基,并且各自能维持一个高精度的时钟。众所周知,Windows是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的。 这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列中的消息就暂时被挂起,得不到实时处理。因此,不能简单地通过Windows消息引发一个对定时要求严格的事件。由于在Windows中已封装了计算机底层硬件的访问,所以,要想通过直接访问硬件来完成精确定时也比较困难。基于本系统定时到毫秒级的要求,采用QueryPerformanceFrequency()和 QueryPerformanceCounter()函数。在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率, 然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。
传输线程的实现 STR-6与PC之间采用串口连接,在Microsoft Visual C++ 6.0环境下通过对Active X控件的编程来实现串口的通信简单方便,可以节省很多时间。首先实例化控件类MSComm,然后通过调用MSComm的函数对串口进行初始化操作,设置其串口号、波特率、奇偶校验、数据位数、停止位数以及接收触发方式等。MSComm类的读写通过调用函数GetInput()和SetOutput()实现。主机周期性地发送入网消息,从机侦听链路35s,以便获取整个网络的时隙分配使用情况,接收到入网消息后,立刻进行精同步过程,发送同步申请消息给主机,主机接收到同步申请消息则发送同步应答消息。精同步后网络进入连续运行阶段,在发送时隙发送消息,接收时隙接收有用消息。因为时钟的漂移性,所以精同步过程要周期性地进行。从机用户程序流程如图2所示,主机用户程序流程图与之相似,所以不再赘述。[align=center]
图2 从机成员流程图[/align]
编解码线程和传输线程的同步 当编解码线程工作的时候,要把数据送入发送缓冲区并从缓冲读出数据进行解码,而传输线程要从发送缓冲区提取数据发送出去、从调制解调器接收数据存入缓冲区,需要设置精确的同步来保证它们之间不发生冲突。以编码线程和发送线程的同步为例进行说明,首先在传输类里定义2个大小相同的发送缓冲区E1、E2,并定义4个事件,分别对应缓冲区E1空事件、缓冲区E1满事件、缓冲区E2空事件、缓冲区E2满事件。在主线程中首先对这4个事件进行初始化,由于开始时刻2个缓冲区应是空的,所以在初始化时缓冲区E1、E2的空事件为信号状态,而缓冲区E1、E2满为非信号状态,这时启动编码线程和发送线程。由于用2个发送缓冲进行工作,所以在线程启动之前必须有一个为当前发送缓冲区和当前编码缓冲区,把E1初始化作为它们的初值。当程序开始工作时,缓冲区空事件处于信号状态,所以编码线程进行编码工作,把压缩数据流存入当前缓冲区,而发送缓冲监测不到缓冲区满事件处于信号状态,所以等待。当前编码缓冲区变满时,编码线程置该缓冲满为信号状态,置该缓冲空为非信号状态,并交换当前编码缓冲区,同时,该线程进入等待状态;此时处于等待状态的发送线程监听到缓冲区满事件处于信号状态,便开始工作,发送当前缓冲的数据到调制解调器或局域网直至完毕。 然后该线程置当前发送缓冲空为信号状态,而当前缓冲满为非信号状态,并交换当前发送缓冲区,这样,等待缓冲区空的编码线程又可以占据该缓冲区,如此反复直至编码线程结束。
结语 实验表明,利用STR-6通信模块设计的无线数据传输模块,数据传送及时、安全可靠、误码率很低,而且体积小、功耗低,可以方便地嵌入到数控机床监测系统中,降低了监控系统的开发成本和开发周期,提高了设备应用的灵活性。 本系统也存在一定的局限性,它的开发基于Windows操作平台,尚不具备跨平台的兼容性。如扩展其应用,还需进一步的工作