多功能串口设备服务器
发表时间:2004-08-28 05:12:36[摘要]
本 文介绍了一个基于Java的多功能串口设备服务器。本服务器能够实现如下功能:(1) 接受从指定串口发送来的信号并将其转发到另外的串口、广播到局域网、或者是通过TCP/IP链接转发给局域网内的其它设备,从而实现局域网内部的信息共 享;(2) 通过TCP/IP链接或者是串口接受其他设备发送给该串口设备的控制信息,从而实现设备的远程控制。
[介绍]
随 着网络技术的高速发展,基于IP技术的局域网已经成为最简单有效的数据交换与共享手段。但是,对于很多遗留设备(譬如说单片机和数据采集设备)来说,唯一 可用的通讯通道就是串口(通常是RS-232)。这些设备一般都配备有专门的数据采集和控制软件,这些软件安装在被称为主控系统的终端或者是PC机上,通 过串口与该设备进行通讯。从串口设备发送来的数据被存储在主控系统的文件系统上,其它设备通过网络访问该主控系统,从而实现数据的共享。对串口设备的配置 和控制,只能够通过主控系统来进行。
这些遗留设备的特征, 就是其“设备--控制终端--网络”体系。在涉及到数据交换与共享的时候,主控系统实质上相当于一个缓冲区。这个缓冲过程使用了效率低下的磁盘操作,从而 使主控系统成为整个数据交换过程中的瓶颈。主控系统的唯一功能是配置和控制该串口设备,用户也只能够通过主控系统来配置和控制该串口设备,这不仅在使用上 给用户带来极大的不便,也带来了硬件资源的浪费。
串口设 备服务器的功能,就是接受串口设备发送来的信息,实时的将其通过串口、网络广播、或者是TCP/IP链接转发给需要这些信息的设备。同时,串口设备服务器 还接受从其它串口或者是网络发送来的信息并将其转发给串口设备。与传统的 “设备--控制终端--网络”体系相比较,串口设备服务器具有如下优势:
(1) 串口设备服务器并不将所交换的数据保留到本地文件系统上,从而消除了 “设备--控制终端--网络”体系中的瓶颈(磁盘操作),从而提高了数据 交换与共享的效率,保证了数据的实时性。
(2) 网络广播技术使得多个设备能够同时利用一个串口设备所提供的数据,从 而提高了设备利用率。
(3) 一台串口设备服务器能够同时为多个设备提供服务。
(4) 远程设备能够通过网络获取串口设备所提供的数据,使得远程数据采集与 处理成为可能。
(5) 远程设备能够通过网络向串口设备发送数据,因此能够从远程对该设备进 行控制和配置。
(6) 用户能够从远程对串口设备服务器进行控制和配置。
由 于以上技术上的优势,串口设备服务器在任何涉及到数据采集与处理的系统中都能够得到广泛的应用。在实验室中采用串口设备服务器,使得科研人员在家里也能够 实时监测实验仪器的运行情况,采集和处理实验数据甚至调整实验条件。在医院里采用串口设备服务器,使得医护人员在办公室里就可以得到各个病人的心电图和脉 搏等数据,这不但提高了医护人员及时发现突发情况的能力,还减轻了医护人员的劳动强度。在航天器上采用串口设备服务器,地面控制人员能够通过无线网络直接 获取传感器数据,修正系统的错误,甚至上载新的任务模块。
本文利用Java实现了一个简单的多功能串口设备服务器。这个服务器能够实现如下功能:
(1) 接受从指定串口发送来的信号并将其转发到另外的串口、广播到局域网、 或者是通过TCP/IP链接转发给局域网内的其它设备。
(2) 通过TCP/IP链接或者是串口接受其他设备发送的控制信息并将其转发给该 串口设备。
(3) 通过TCP/IP链接接受用户的控制指令,从而改变自身的运行参数。
[系统设计]
根据一上所述系统需求,这个简单的串口设备服务器包括如下功能模块:主控模块,远程控制模块,以及数据交换模块。
主控模块的功能是初始化各项运行参数,同时启动远程控制模块。
远程控制模块通过TCP/IP链接接受用户指令并根据指令实现如下功能:改变串口参数,与指定串口设备进行通讯,启动或者终止指定数据交换模块。
数据交换模块接受串口设备的输出数据并转发给其他设备,同时从其它设备接受控制信号并转发给串口设备。根据系统需求我们设计了三个数据交换模块:
(1) 数据广播模块,接受串口设备的输出数据并将其广播到局域网;
(2) TCP/IP数据服务模块,接受串口设备的输出数据并通过TCP/IP链接将其转 发到指定客户机,同时接受该客户机发送的控制指令并将其转发给串口设 备;
(3) 串口数据服务模块,接受串口设备的输出数据并通过另一串口转发给其他 设备,同时接受其他设备发送的控制指令并将其转发给串口设备。
根据以上设计,将各个功能模块命名如下:
主控模块 -- DeviceServer
远程控制模块 -- RemoteControl
数据广播模块 -- Broadcast
TCP/IP数据服务模块 -- ServeTcp
串口数据服务模块 -- ServeCom
以上所述功能模块,在程序设计中分别作为一个Java类进行实现。功能模块与 Java源代码文件之间的一一对应关系如下:
主控模块 -- DeviceServer.java
远程控制模块 -- RemoteControl.java
数据广播模块 -- Broadcast.java
TCP/IP数据服务模块 -- ServeTcp.java
串口数据服务模块 -- ServeCom.java
[程序设计]
(1) 主控模块
主 控模块的功能是初始化各项运行参数,同时启动远程控制模块。在这个简单的串口设备服务器中并没有定义任何运行参数,因此主控模块的唯一功能是启动远程控制 模块。本模块从命令行接受一个参数,该参数指定远程控制模块所使用的端口号,远程客户可以通过该端口对本系统进行控制和配置。本功能模块包括如下步骤:
a. 检查用户是否从命令行提供了一个参数。如果是,继续运行下一步;如果 否,输出一条出错信息并退出系统。
b. 检查用户所提供的命令行参数是否可以解释成一个端口号(一个整数)。如 果是,继续运行下一步;如果否,输出一条出错信息并退出系统。
c. 检查用户所提供的端口号是否系统端口(即小于1024)或者是无效端口( 即 大于65535)。如果否,继续运行下一步;如果是,输出一条出错信息并退 出系统。
d. 声明一个远程控制模块,然后启动该模块。
主控模块被保存为DeviceServer.java。
(2) 远程控制模块
远程控制模块通过TCP/IP链接接受用户指令并根据指令实现如下功能:改变串口参数,与指定串口设备进行通讯,启动或者终止指定数据交换模块。根据系统需求,本模块又包括如下方法:
系统配置方法:
a. 指定串口设备所在的串口;
b. 指定与该串口设备通讯所使用的参数,包括波特率,数据位,停止位和奇 偶性校验位。
c. 指定其他设备所在的串口;
d. 指定与其他设备通讯所使用的参数,包括波特率,数据位,停止位和奇偶 性校验位。
e. 指定数据广播端口,即客户机用来监听实时数据的端口。
f. 指定数据服务端口,即客户机用来请求实时数据的端口。
g. 指定数据交换模块。为简单起见,本系统一次只能够启动一个数据交换模 块提供数据交换服务。
系统控制方法:
a. 解释控制指令,这个方法解释客户机所发送的控制和配置指令,然后调用 相应的系统控制或配置方法。
b. 启动与串口设备的连接。
c. 切断与串口设备的连接。在切断与串口设备的连接之前必须关闭所使用的 端口或者是切断与客户机的联接。
d. 启动数据交换模块。
e. 终止数据交换模块。在终止数据交换模块之前必须关闭所使用的端口或者 是切断与客户机的联接。
f. 退出系统。在退出系统之前必须关闭所有端口,终止数据交换模块。
由于这个功能模块所需要实现的功能比较多,为节省篇幅起见,以下示例程序中没有设计异常处理功能。在程序的注释行中,对有可能导致异常的地方添加了部分说明。
远程控制模块被保存为RemoteControl.java。
(3) 数据广播模块
数 据广播模块的功能是接受串口设备的输出信号,然后将其通过广播将其转发到局域网。在局域网中的所有设备都可以通过监听广播端口来获得串口设备所提供的数 据,从而使得多个设备同时共享一个特殊设备成为可能。这个功能模块首先建立一个广播服务器,然后不断的监听串口设备的输出流。当输出流里面有数据存在的时 候,广播服务器将其取出并广播到局域网。
数据广播模块被保存为Broadcast.java。
(4) TCP/IP数据服务模块
TCP/IP 数据服务模块的功能是接受串口设备的输出信号,然后通过TCP/IP连接将其转发给客户机。这个模块还能够接受客户机通过TCP/IP连接发送来的控制信 号并将其转发给串口设备,从而实现了串口设备的远程控制与配置功能。在这个模块中包括三个线程:服务器线程接受客户机的连接请求,数据服务线程监测串口设 备的输出流并将数据转发给客户机,控制信号服务线程监测客户机的输出流并将信号转发给串口设备。为简单起见,这个示例程序一次只能够接受一个客户机的连接 请求,但是用户能够很容易的将其改写成能够同时为多个客户机提供服务。
TCP/IP数据服务模块被保存为ServeTcp.java。
(5) 串口数据服务模块
串 口数据服务模块的功能是接受串口设备的输出信号,然后通过串口将数据转发给其它通过串口连接的设备。与TCP/IP数据服务模块类似,这个模块还能够接受 客户设备通过串口发送来的控制信号并将其转发给串口设备,从而实现了串口设备的远程控制与配置功能。通常来说,两个设备通过串口进行通讯要求这两个设备使 用相同的通讯参数,例如波特率,数据位,停止位和奇偶性校验位。但是对于很多遗留设备来说,他们往往只能够使用固定的通讯参数进行工作,从而导致了由于两 个设备由于通讯参数不同而无法共享数据的问题。在这个示例程序中,不同的设备可以使用不同的通讯参数,从而解决了具有不同固定通讯参数的设备之间的数据交 换问题。
在这个功能模块中包括两个线程:数据服务线程监 测串口设备的输出流并将数据转发给客户设备,控制信号服务线程监测客户设备的输出流并将信号转发给串口设备。为简单起见,这个示例程序一次只能够为一个客 户设备提供数据服务,但是用户也能够很容易的将其改写成能够同时为多个客户设备提供服务。
串口数据服务模块被保存为ServeCom.java。
[系统测试]
本多功能串口设备服务器的测试应该在局域网中进行。优选的测试方案应该具备如下硬件条件:
计 算机A -- 运行本多功能串口设备服务器。本机必须配备Java运行环境和由 Sun公司提供的通讯扩展类库javax.comm,这些软件都可以从Java 软件的主页www.javasoft.com免费下载。再进行测试之前必须根据 该软件包所提供的说明文件正确进行安装,否则在测试的时候系统 将无法找到本机串口。
计算机B -- 运行超级终端模拟一个串口设备,通过RS-232电缆与计算机A的串 口COM1相连接。
计算机C -- 运行超级终端模拟其它串口设备,通过RS-232电缆与计算机A的串 口COM2相连接。
计算机D -- 通过局域网与计算机A相连接,模拟局域网中向多功能串口设备服 务器请求数据的其它网络设备。
在计算机A 上运行本多功能串口设备服务器,然后通过TELNET进入远程控制状态。用户通过命令行方式对服务器进行控制和配置。本服务器所提供的控制和配置指令如下:
SET DEVICE PORT -- 设定串口设备所在的串口。本命令接受一个整数 参数,该参数指定串口设备所在的串口。
SET DEVICE PARAM -- 设定串口设备所使用的通讯参数。本命令接受一 个参数串,如38400,8,1,0 表示波特率38400 , 数据位8,停止位1,无奇偶检验。
SET PEER PORT -- 设定其它设备所在的串口。本命令接受一个整数 参数,该参数指定串口设备所在的串口。
SET PEER PARAM -- 设定其它设备所使用的通讯参数。本命令接受一 个参数串,如38400,8,1,0 表示波特率38400 , 数据位8,停止位1,无奇偶检验。
SET BROADCAST PORT -- 设定数据广播端口。本命令接受一个整数参数, 该参数指定客户机用来监听数据广播的端口。
SET SERVICE PORT -- 设定数据服务端口。本命令接受一个整数参数, 该参数指定服务器用来提供数据服务的端口。
SET SERVICE TYPE -- 指定数据服务类型。本命令接受一个整数参数, 1 表示数据广播服务,2 表示TCP/IP数据服务, 3 表示串口数据服务。其它数值都是无效参数。
CONNECT TO DEVICE -- 接通串口设备。本命令不接受任何参数。
DISCONNECT FROM DEVICE -- 切断串口设备。本命令不接受任何参数。
START SERVICE -- 启动数据服务。本命令不接受任何参数。
STOP SERVICE -- 终止数据服务。本命令不接受任何参数。
SHUT DOWN -- 终止多功能串口设备服务器。本命令不接受任何 参数。
QUIT -- 退出远程控制系统。本命令不接受任何参数。
由于远程控制服务器在处理命令之前将命令行转换成大写,因此用户可以用大写或者是小写输入控制与配置指令。
(1) 数据广播功能测试
计 算机A 启动多功能串口设备服务器,计算机B 启动超级终端模拟串口设备。启动多功能串口设备服务器时必须指定一个端口号(如8888)以提供远程控制服务。利用Telnet进入远程控制程序(如 telnet localhost 8888),就可以通过控制指令控制和配置多功能串口设备服务器了。
需 要说明的是,由于Windows 自带的Telnet程序不回显输入数据,因此用户看不到自己所输入的命令。建议用户从一台类似于UNIX的系统远程Telnet到串口设备服务器进行控制 和配置。如果计算机A 的IP为90.0.0.1,多功能串口设备服务器的远程控制服务程序运行在端口8888,那么用户就可以通过telnet 90.0.0.1 8888连接到远程控制服务器。
用户连接到远程控制服务器后,运行如下命令:
SET DEVICE PORT 1
SET DEVICE PARAM 115200,8,1,0
CONNECT TO DEVICE
SET SERVICE TYPE 1
SET BROADCAST PORT 8080
START SERVICE
以 上指令设定串口设备连接在COM1 ,通讯参数为115200,8,1,0。运行在计算机B 上的超级终端应该使用同样的通讯参数。成功的与串口设备建立起连接后指定8080为数据广播端口,再指定系统提供数据广播服务,最后启动数据广播服务。这 时候,在同一局域网内的其它计算机(如计算机D )就应该能够在8080端口监听到由串口设备(计算机B )所发送的数据。
本文提供了一个示例程序可以用来监听广播到指定端口的数据。该程序从命令行接受一个参数,这个参数指定监听的端口。这个程序被保存为 BClient.java。
在 机器D 上运行以上程序并指定8080为监听端口。在机器B 的超级终端窗口内随意输入作为串口设备的输出数据,这些数据被多功能串口设备服务器所接收并实时的广播到局域网,因此机器D 的屏幕上应该同时打印出这些数据来。如果局域网网中同时还有其它计算机运行以上接收程序并指定8080为监听端口,那么这些计算机也能够同时接收到串口设 备的输出数据。
(2) TCP/IP数据服务功能测试
在远程控制终端输入如下控制指令测试TCP/IP数据服务功能:
STOP SERVICE
SET SERVICE TYPE 2
SET SERVICE PORT 8023
START SERVICE
以 上控制指令指定多功能串口设备服务器在端口8023启动TCP/IP数据服务。从机器D 通过Telnet连接到该端口(如telnet 90.0.0.1 8023)就可以接收到串口设备所输出的数据。在机器D 上所输入的数据,也被实时的传送到串口设备,因此在机器B 的超级终端窗口内能够看到从机器D 所输入的数据。因此,局域网内的设备不但能够通过串口设备服务器利用该串口设备进行远程数据采集与处理,还能够实现串口设备的远程控制和配置。
(3) 串口数据服务功能测试
在远程控制终端输入如下控制指令测试串口数据服务功能:
STOP SERVICE
SET PEER PORT 2
SET PEER PARAM 38400,8,1,0
SET SERVICE TYPE 3
START SERVICE
以上控制指令指定其它串口设备被连接在COM2上,所使用的通讯参数为38400, 8,1,0。 最后面两个控制指令指定系统运行串口数据服务。
计 算机C 上运行超级终端程序,其通讯参数为38400,8,1,0。这时候串口设备(计算机B )可以接收到其它设备(计算机C )所发送的数据,其它设备(计算机C ) 也可以接收串口设备(计算机B )所发送的数据。我们注意到,两个串口设备( 计算机B 和C ) 所使用的通讯参数是不同的,但是他们可以通过这个多功能串口设备服务器进行数据交换。
(4) 其它功能测试
在远程控制终端输入如下控制指令:
DISCONNECT FROM DEVICE
以上控制指令切断与串口设备的连接。如果当前正在提供远程数据服务( 如数据广播服务,TCP/IP数据服务,串口数据服务),这项服务将被关闭。
QUIT
以上控制指令终止客户机与远程控制终端的会话,多功能串口设备服务器的所有配置保持终止会话前的状态,正在提供的远程数据服务继续提供。
SHUT DOWN
以上控制指令强制停止多功能串口设备服务器的执行。当前正在提供的远程数据服务将被关闭,与串口设备的连接将被切断。
(5) 测试结果
作者对本系统的功能进行了全面的测试,实际测试环境如下:
计算机A -- Windows 2000英文版 + Java SDK 1.3 + Java Comm API
计算机B -- Windows 98英文版 + 超级终端
计算机C -- Windows 98英文版 + 超级终端
计算机D -- Windows 98英文版 + Java SDK 1.3
计算机E -- Red Hat 6.1
所 有机器通过100M高速Ehternet连接。计算机B 通过RS-232电缆连接到计算机 A 的COM1,计算机C 通过RS-232电缆连接到计算机A 的COM2。在实际测试中,通过计算机E 远程连接到计算机A 进行远程控制与配置。测试结果表明,该系统能够实现远程控制与配置与远程数据服务等全部功能。
[结论]
本文设计和实现了一个基于Java的多功能串口设备服务器。本多功能串口设备服务器能够实现如下功能:
(1) 远程控制与配置。
(2) 为串口设备提供远程数据服务。数据广播服务使得局域网内的多个设备能 够同时利用一个串口设备所提供的数据;TCP/IP数据服务使得局域网内的 设备能够通过TCP/IP连接获得串口设备所提供的数据,并且能够远程对该 串口设备进行控制和配置;串口数据服务使得两个使用不同通讯参数的串 口设备能够进行数据交换。
(3) 本系统不但实现了在局域网内的串口设备信息共享,并且大幅度提高了数 据交换的速度和效率。
(4) 本系统在Windows 平台上测试成功。由于Java语言的垮平台特性,本系统 只需要进行很小的改动就可以移植到其它平台上。
(5) 本系统在涉及到数据采集与处理的行业中具有广泛的应用前景。
[其他]
本文于2001年8月首次发表于IBM DeveloperWorks中国网站。
http://www.ibm.com/developerWorks/cn
| 上一篇 | 下一篇 |
| 姓名: | |
| 评论: | |
|
请输入下面这首诗词的作者姓名。 日照香炉生紫烟,遥看瀑布挂前川。 |
|
| 答案: | |
云与清风常拥有,
冰雪知音世难求。
击节纵歌相对笑,
案上诗书杯中酒。
2020年12月31日
洛杉矶
最新评论
2026-07-23 11:37:04
qyjohn 评论了 《几句翻译》
2026-07-21 20:11:28
wells 评论了 《几句翻译》
2025-11-15 06:29:51
qyjohn 评论了 《青桔》
2025-11-14 01:55:04
wells 评论了 《青桔》
2025-10-24 18:04:06
Ted Wang 评论了 《关于作者(About Me)》
2025-03-27 08:28:09
Max 评论了 《父亲走了》
2025-03-08 04:13:52
W 评论了 《我不想颂扬普京大帝》
2024-07-22 16:02:03
云思 评论了 《无题》
2024-06-27 10:01:54
yiming 评论了 《致访客(Welcome)》
2024-05-06 08:50:06
qyjohn 评论了 《致访客(Welcome)》
2024-05-03 19:49:00
jimmie 评论了 《致访客(Welcome)》
2024-02-19 03:32:57
林小静 评论了 《埋剑渡》
2024-01-05 03:54:28
路过者 评论了 《2023年度盘点》
2024-01-04 10:22:05
qyjohn 评论了 《致访客(Welcome)》
2024-01-04 08:05:13
qyjohn 评论了 《2023年度盘点》