一种基于串口的服务器控制方法

文档序号:7740293阅读:351来源:国知局
专利名称:一种基于串口的服务器控制方法
技术领域
本发明主要是涉及到利用各种终端通过串口控制服务器的各种项目中,尤其是控
制服务器的基本操作或是从服务器取得各种信息显示在终端上的方法。
背景技术
目前嵌入式系统最常用的接口就是RS-232串口,SUN的CommAPI分别提供了对常
用的RS232串行端口和IEEE1284并行端口通讯的支持。RS_232_C(又称EIARS_232_C,以
下简称RS232)是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及
计算机终端生产厂家共同制定的用于串行通讯的标准。RS232是一个全双工的通讯协议,它
可以同时进行数据接收和发送的工作。目前,常见的Java串口包有SUN在1998年发布的
串口通信API :comm2. 0. jar (Windows下)、comm3. 0. jar (Linux/Solaris)还有第三方RXTX
项目提供了 Windows, Li皿x, Macos X, Solaris操作系统下白勺兼容javax. comm 串口通讯包
API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便。针对x86体系
结构的Li皿x操作系统平台,RXTX的部署包括下面几个文档 *RXTXcomm. jar RXTX自己的javax. comm实现 *librxtxSerial. so由RXTXcomm. jar调用的底层串口库文档 *librxtxParallel. so由RXTXcomm. jar调用的底层并口库文档 氺javax. comm. properties RXTX驱动的类配置文档,内容是Driver = g皿.
io. RXTXCommDriver 当我们在测试的时候,发现sun公司提供的驱动包,当底层发送数字10的时候,发 送的时候就会出现问题。他底层实现就会自动多发一个字节的数据。所以现在用的是rxtx 包。他是考配置文件来该所使用的端口。用rxtx包,修改的程序不需要大的改动。

发明内容
本发明的内容就是利用控制终端控制服务器的操作,或取得信息从服务器上显示 在控制终端上, 本发明的目的是按以下方式实现的,定义串口通讯协议的数据包格式,其中定义
包括发送的格式和发出的格式、发送采用的波特率和字符编码,根据协议的要求通过串口
通信程序把所需要的数据发送出去,显示到控制终端上或通过控制终端利用串口通信程序
实现控制服务器,具体实现步骤如下 — 、定制串口协议规则,包括串口的参数 当串口向系统发送数据是指控制终端通过响应事件来设置所要的数据,把数据的 信息以字符的形式发送给系统,以下通一简称为"serial到system",当系统向串口发送 响应的数据是指系统收到有效的信息后,做出的相应的处理结果,把结果以字符的形式发 送给串口,以下统一简称为"system至lj serial"无论从system至lj serial还是serial到 system都是以字符的形式发送且字符编码都是Unicode ;
A :定义串口的初始化参数,波特率统一设置为9600 ;数据位8位,停止位l,奇偶 校验无; B:定义从控制终端通过串口发送数据到系统的数据格式,定义了包头,命令,信息 长度,信息位,数据,包尾,校验和; 规定包头统一用#号,命令分别用到FGVCRDT字母,信息长度是统计信息位和数据 的字节数的总和; 信息位是判断受到的数据正确与否和收到正确的数据后,执行系统命令正确与 否,当要收到错误命令的时候标志位为E,当执行系统命令出错的时候返回F正确的时候返 回T; 数据位当有数据的时候返回实际的数据,当没有数据返回0包尾*号; 校验和指的是所有从包头到包尾的ASCII码的总和,同理配置从系统通过串口
发送到控制终端配置的数据格式也分为包头,命令,信息长度,信息位,数据,包尾,校验和,
但是从系统通过串口发送到控制终端的信息位和数据是不一样的,其他的都一样,因为这
里的标志位代表执行系统的命令是否正确,数据位代表要取的数据,从包头到包尾的ascii
码的和是用四个字节表示; 二配置驱动程序 RXTX是一个提供串口和并口通信的开源Java类库,由该项目发布的文件均遵循 LGPL协议; A :修改javax. comm. properties RXTX驱动的类配置文件,内容是Driver = gnu. io. RXTXCommDriver serpath0 = /dev/ttySO这里的ttys0代表是串口 1,是串口 2侧修改 成ttysl ; B :把下载下来的rxtx解压后,另外还有li皿x/solaris/windows/mac的目录,这 是RXTX针对不同平台的动态链接库,处理器是i386,所以就是i686-unknown-l i皿x-g皿下 的so文件librxtxParallel. so, librxtxSerial. so两个文件考到$JAVA_HOME/lib/下,同 时在考到〈java_home>/jre/lib/i386下; C :把javax. comm. properties 文件考至U $JAVA_HOME/jre/lib下;
D :最后把RXTXCommon. jar添加到你的工程里; 注意用ide工具eclipse编译用上边的方法;用命令编译把RXTXCommon. jar拷 贝到$JAVA_H0ME/jre/lib/ext目录下;
三初始化串口程序 这里的初始化指的后台程序进行的初始化,包括初始化串口的端口号,串口的传 输速率,端口时超时时间,串口的数据位,串口的停止位,因为我们是操作控制终端来触 发的事件,所以让串口的继承erialPortEventListener这个类,然后让他实现是该类的 public void serialEvent (SerialPortEvent serialevent)这个方法,然后让事件监听注 册到串口类中serialport. addEventListener (this),最重要的是得到输入和输出流,in =serialport. getI即utStre咖();out = serialport. get0utputStre咖();利用输入输出 流来操作得到和输出的数据,当都初始化成功返回该串口对象,当调用完之后必须关闭串 口 , out. close 0 ,
in. close ();
四数据格式的优化操作 当通过串口接收到数据,把数据返回给业务逻辑层来处理数据,这里用到了大量
的优化数据的操作,包括以下内容 A :判断接收到的数据是否正确,用 Pattern, compile (" # [T, D, R, C, V, G, F] 0200\\*\\d+〃 );来匹配正确的数据包, 此处用到的匹配方法就是通讯协议定义的格式,当不匹配的时候直接按照铜须协议定义的 发送给串口的数据格式返回一个错误指令,即信息标志位为E,表示接收的数据有问题,当 正确的时候,把这个正确的字符串返回给public booleanmesglength(Stringm)判断校验 和是否正确,不正确也是把标志位为E,正确后调用public String realString (String m) 把正确的数据包的字符串置成全局变量; B:执行public String getCommand (String m),分解出所要执行的命令关键字, 然后根据命令调用不同的执行方法对应的执行的底层的命令,底层对象取得数据后,把信 息位置为F或T,分别代表执行错误和执行正确的标志,把取得的数据放到数据位上;
C :串口通过初始化业务逻辑类public class HandleString,调用 publicFlagBean syscommand (String m)调用刚才执行命令,返回一个不带校验和的数据 包格式的字符串; D: 初始化优化类Ret證String后,调用public byte[] returnbytes (FlagBeanf lag),把刚才得到的数据包字符串,无论是正确的还是错误的都调 用public byte[]covbyte(FlagBean f lag),就是根据不同的命令来区分不同的数据发送 格式,按照通讯协议的格式来优化,把他们调优成对应的字节格式,包括把一个整数类型转 换成一个字节,执行完返回给一个字节数组,此时的字节数组就是一个完整的数据包格式, 但是不带校验和,然后returnbytes在根据这个数组算出校验和,统一放到一个字节数组 里,返回给串口发送端,串口发送端public voidwritePort2 (byte []result);
监听读取数据和串口发送数据的方法,监听的判断依据就是当有数据的时候 就接受serialevent. DATA—AVAILABLE = = serialevent. getEventType (),接受时设 了一个字节缓存区,每次有数据的时候发数据放到缓存区中,其中就是控制终端发送的 校验和是float类型,接受过来的时候要把他转换成float后,在和前面的数据一起合 并后把他传给业务逻辑层,当业务逻辑层把数据处理后传回来时,由串口 public void writePort (byte []result)负责把数据通过串口传到控制终端上,然后调用public void writePort(byte b) , out. write (b) ;out. flush ();用写入串口字节,然后清除缓存区,这样 保证每次都发送的数据是最新的。 本发明的优异效果是该方法的功能是通过定制通信协议,根据协议的要求通过 串口通信程序把所需要的数据发送出去,然后利用控制终端可以显示出来数据也可以来控 制服务器。该方法的好处是有了这套通信协议的定制和程序的实现,以后有关于控制服务 器的操作的相关项目中,都能很快的修改少量的通讯协议或程序就可以轻松实现,无论控 制终端是控制终端还是其他的一些设备,都可以达到控制服务器的效果。因为他都是在底 层实现了串口的通讯,从而通过串口实现了控制服务器的目的。


图1是基于串口控制服务器的方法的步骤示意图。
具体实施例方式
为了使本发明的目的、技术方案和优点更加清晰,下面结合附图和实施例,对本发
明作以下详细说明
内容如下 a :定制串口协议规则。(包括串口的参数),主要定制从串口发送的数据包格式和 从串口发出的数据包格式。 b :配置驱动程序,加载驱动程序包,配置串口需要的配置文件,并使得程序找到对 应的驱动包。
C :初始化串口程序,指后台程序初始化串口,并打开串口,注册监听事件。
d :数据格式的优化操作,指发送数据之前的数据优化操作。
实施例 —定制串口协议规则。(包括串口的参数) 当串口向系统发送数据是指控制终端通过响应事件来设置所要的数据,把数据的
信息以字符的形式发送给系统。以下通一简称为"serial到system"。当系统向串口发送
响应的数据是指系统收到有效的信息后,做出的相应的处理结果,把结果以字符的形式发
送给串口。以下统一简称为"system至lj serial"无论从system至lj serial还是serial到
system都是以字符的形式发送且字符编码都是Unicode A :定义串口的初始化参数,波特率设置统一都设置为为9600。 数据位8位,停止位1,奇偶校验无。 B :定义从控制终端通过串口发送数据到系统的数据格式。定义了包头,命令,信息 长度,信息位,数据,包尾,校验和。这样严格的定义才能保证在当受到外界或干扰的情况下, 有可能数据遗漏或出错的情况下,才可能保证数据的完整性。我们规定包头统一用#号,命令 分别用到FGVCRDT字母,信息长度是统计信息位和数据的字节数的总和,这样是保证当出错 了 ,但是校验和刚好和正确的时候的校验和一样的时候,有了这个的校验,跟能保证数据的严 谨性。信息位是判断受到的数据正确与否和收到正确的数据后,执行系统命令正确与否。当 要收到错误命令的时候标志位为E,当执行系统命令出错的时候返回F正确的时候返回T。数 据位当有数据的时候返回实际的数据,当没有数据返回O.包尾*号。校验和指的是所有
从包头到包尾的ASCII码(十进制)的总和(4个字节,如果不够4字节时,前面的字节补0) 同理配置从系统通过串口发送到控制终端配置的数据格式也分为包头,命令,信息长度,信息 位,数据,包尾,校验和。但是从系统通过串口发送到控制终端的信息位和数据是不一样的,其 他的都一样,因为这里的标志位代表执行系统的命令是否正确,数据位代表要取的的数据。校 验和还是算的从包头到包尾的ascii码的和,也是用四个字节表示。
二 配置驱动程序 RXTX是一个提供串口和并口通信的开源Java类库,由该项目发布的文件均遵循 LGPL协议。A :修改javax. comm. properties RXTX驱动的类配置文件,内容是Driver = gnu.io. RXTXCommDriver serpath0 = /dev/ttySO这里的ttys0代表是串口 1。如果你用的是 串口 2把这里修改成ttysl就可以。B :矛巴下载下来的rxtx角牟压后,另夕卜还有linux/solaris/windows/mac 的目录,这是RXTX针对不同平台的动态链接库。我的处理器是i386,所以就是 i686-皿known-li皿x-g皿下的so文件librxtxParallel. so, librxtxSerial. so两个文件 考到$JAVA_HOME/lib/下,同时在考到
〈java_home>/jre/lib/i386下。C :把javax. comm. properties文件考至U $JAVA_H0ME/jre/lib下。
D :最后把RXTXCommon. jar添加到你的工程里。 注意如果你用ide工具如eclipse编译用上边的方法可以。如果用命令编译你 还的把RXTXCommon. jar拷贝到$JAVA_H0ME/jre/lib/ext目录下。才能用命令编译。
三初始化串口程序 这里的初始化指的的后台程序进行的初始化,包括初始化串口的端口号,串口的 传输速率,端口时超时时间,串口的数据位,串口的停止位。因为我们是操作控制终端来触 发的事件,所以让串口的继承erialPortEventListener这个类。然后让他实现是该类的 public void serialEvent (SerialPortEvent serialevent)这个方法。然后让事件监听注 册到串口类中 serialport. addEventListener (this)。最重要的是得到输入和输出流,如in = serialport. getI即utStre咖();out = serialport. get0utputStre咖();利用输入输出流 来操作得到和输出的数据。当都初始化成功返回该串口对象,当调用完之后必须关闭串口, out. close (), in. close ()。这里主要说一下监听读取数据和串口发送数据的方法。监听的 判断依据就是当有数据的时候就接受 serialevent. DATA—AVAILABLE = = serialevent. getEventType ()。接受时设了 一个字节缓存区,每次有数据的时候发数据放到缓存区中,其中有个小技巧就是控制终端 发送的校验和是float类型,接受过来的时候要把他转换成float后,在和前面的数据一起 合并后把他传给业务逻辑层。当业务逻辑层把数据处理后传回来时,由串口 public void writePort (byte []result)方法负责把数据通过串口传到控制终端上,此方法然后调用 public void writePort (byte b)方法,该方法out. write (b) ;out.flush();用写入串口字 节,然后清除缓存区,这样保证每次都发送的数据是最新的。
四数据格式的优化操作 当通过串口接收到数据,把数据返回给业务逻辑层来处理数据,这里用到了大量 的优化数据的操作。 A :判断接收到的数据是否正确,用 Pattern, compile (" # [T, D, R, C, V, G, F] 0200\\*\\d+〃 );来匹配正确的数据包, 此处用到的匹配方法就是通讯协议定义的格式,当不匹配的时候直接按照铜须协议定义的 发送给串口的数据格式返回一个错误指令,即信息标志位为E,表示接收的数据有问题。当 正确的时候,把这个正确的字符串返回给public booleanmesglength (String m)这个方 法,此方法是判断校验和是否正确,不正确也是把标志位为E。正确后调用public String realString(String m)方法,此方法是把正确的数据包的字符串置成全局变量。
8
B:执行public String getCommand(String m)方法,此方法是分解出所要执行的 命令关键字,然后根据命令调用不同的执行方法对应的执行的底层的命令,底层对象取得 数据后,把信息位置为F或T,分别代表执行错误,执行正确的标志。把取得的数据放到数据 位上。 C :串口通过初始化业务逻辑类public class HandleString,调用 publicFlagBean syscommand (String m)方法,此方法就是调用刚才执行命令的方法,此方 法返回一个不带校验和的数据包格式的字符串。 D: 初始化优化类Ret證String后,调用public byte[] returnbytes (FlagBeanf lag)方法,此方法就是把刚才得到的数据包字符串,无论是正 确的还是错误的都可以调用此方法,是一个通用方法,此方法会调用public byte[] covbyte (FlagBean flag)方法,为了就是根据不同的命令来区分不同的数据发送格式,按 照通讯协议的格式来优化,把他们调优成对应的字节格式,包括把一个整数类型转换成一 个字节,这是比以往做串口程序优化的,以往是把数据当字符串发给串口的,然后串口底层 是自己转换的,而此方法是做到底层之上的。执行完此方法返回给一个字节数组,此时的字 节数组就是一个完整的数据包格式,但是不带校验和,然后returnbytes方法在根据这个 数组算出校验和,统一放到一个字节数组里,返回给串口发送端,串口发送端public void writePort2 (byte []result)方法。此时就是一个完整的过程。
权利要求
一种基于串口的服务器控制方法,其特征在于,定义串口通讯协议的数据包格式,其中定义包括发送的格式和发出的格式、发送采用的波特率和字符编码,根据协议的要求通过串口通信程序把所需要的数据发送出去,显示到控制终端上或通过控制终端利用串口通信程序实现控制服务器,具体实现步骤如下一、定制串口协议规则,包括串口的参数当串口向系统发送数据是指控制终端通过响应事件来设置所要的数据,把数据的信息以字符的形式发送给系统,以下通一简称为“serial到system”,当系统向串口发送响应的数据是指系统收到有效的信息后,做出的相应的处理结果,把结果以字符的形式发送给串口,以下统一简称为“system到serial”无论从system到serial还是serial到system都是以字符的形式发送且字符编码都是Unicode;A定义串口的初始化参数,波特率统一设置为9600;数据位8位,停止位1,奇偶校验无;B定义从控制终端通过串口发送数据到系统的数据格式,定义了包头,命令,信息长度,信息位,数据,包尾,校验和;规定包头统一用#号,命令分别用到FGVCRDT字母,信息长度是统计信息位和数据的字节数的总和;信息位是判断受到的数据正确与否和收到正确的数据后,执行系统命令正确与否,当要收到错误命令的时候标志位为E,当执行系统命令出错的时候返回F正确的时候返回T;数据位当有数据的时候返回实际的数据,当没有数据返回0包尾*号;校验和指的是所有从包头到包尾的ASCII码的总和,同理配置从系统通过串口发送到控制终端配置的数据格式也分为包头,命令,信息长度,信息位,数据,包尾,校验和,但是从系统通过串口发送到控制终端的信息位和数据是不一样的,其他的都一样,因为这里的标志位代表执行系统的命令是否正确,数据位代表要取的数据,从包头到包尾的ascii码的和是用四个字节表示;二配置驱动程序RXTX是一个提供串口和并口通信的开源java类库,由该项目发布的文件均遵循LGPL协议;A修改javax.comm.properties RXTX驱动的类配置文件,内容是Driver=gnu.io.RXTXCommDriver serpath0=/dev/ttyS0这里的ttys0代表是串口1,是串口2侧修改成ttys1; B把下载下来的rxtx解压后,另外还有linux/solaris/windows/mac的目录,这是RXTX针对不同平台的动态链接库,处理器是i386,所以就是i686-unknown-linux-gnu下的so文件librxtxParallel.so,librxtxSerial.so两个文件考到$JAVA_HOME/lib/下,同时在考到<java_home>/jre/lib/i386下;C把javax.comm.properties 文件考到$JAVA_HOME/jre/lib下;D最后把RXTXCommon.jar添加到你的工程里;注意用ide工具eclipse编译用上边的方法;用命令编译把RXTXCommon.jar拷贝到$JAVA_HOME/jre/lib/ext目录下;三初始化串口程序这里的初始化指的后台程序进行的初始化,包括初始化串口的端口号,串口的传输速率,端口时超时时间,串口的数据位,串口的停止位,因为我们是操作控制终端来触发的事件,所以让串口的继承erialPortEventListener这个类,然后让他实现是该类的public void serialEvent(SerialPortEvent serialevent)这个方法,然后让事件监听注册到串口类中serialport.addEventListener(this),最重要的是得到输入和输出流,in=serialport.getInputStream();out=serialport.getOutputStream();利用输入输出流来操作得到和输出的数据,当都初始化成功返回该串口对象,当调用完之后必须关闭串口,out.close(),in.close();四数据格式的优化操作当通过串口接收到数据,把数据返回给业务逻辑层来处理数据,这里用到了大量的优化数据的操作,包括以下内容A判断接收到的数据是否正确,用Pattern.compile(″#[T,D,R,C,V,G,F]0200\\*\\d+″);来匹配正确的数据包,此处用到的匹配方法就是通讯协议定义的格式,当不匹配的时候直接按照铜须协议定义的发送给串口的数据格式返回一个错误指令,即信息标志位为E,表示接收的数据有问题,当正确的时候,把这个正确的字符串返回给public booleanmesglength(String m)判断校验和是否正确,不正确也是把标志位为E,正确后调用public String realString(String m)把正确的数据包的字符串置成全局变量;B执行public String getCommand(String m),分解出所要执行的命令关键字,然后根据命令调用不同的执行方法对应的执行的底层的命令,底层对象取得数据后,把信息位置为F或T,分别代表执行错误和执行正确的标志,把取得的数据放到数据位上;C串口通过初始化业务逻辑类public class HandleString,调用publicFlagBean syscommand(String m)调用刚才执行命令,返回一个不带校验和的数据 包格式的字符串;D初始化优化类ReturnString后,调用public byte[]returnbytes(FlagBeanflag),把刚才得到的数据包字符串,无论是正确的还是错误的都调用public byte[]covbyte(FlagBean flag),就是根据不同的命令来区分不同的数据发送格式,按照通讯协议的格式来优化,把他们调优成对应的字节格式,包括把一个整数类型转换成一个字节,执行完返回给一个字节数组,此时的字节数组就是一个完整的数据包格式,但是不带校验和,然后returnbytes在根据这个数组算出校验和,统一放到一个字节数组里,返回给串口发送端,串口发送端public voidwritePort2(byte[]result)。
2.监听读取数据和串口发送数据的方法,其特征在于,监听的判断依据就是当有数 据的时候就接受serialevent. DATA—AVAILABLE = = serialevent. getEventType (),接 受时设了一个字节缓存区,每次有数据的时候发数据放到缓存区中,其中就是控制终端发 送的校验和是float类型,接受过来的时候要把他转换成float后,在和前面的数据一起 合并后把他传给业务逻辑层,当业务逻辑层把数据处理后传回来时,由串口 public void writePort (byte []result)负责把数据通过串口传到控制终端上,然后调用public void writePort(byte b) ,out. write (b) ;out. flush ();用写入串口字节,然后清除缓存区,这样 保证每次都发送的数据是最新的。
全文摘要
本发明提供一种基于串口的服务器控制方法,该方法的功能是通过定制通信协议,根据协议的要求通过串口通信程序把所需要的数据发送出去,然后利用控制终端可以显示出来数据也可以来控制服务器。该方法的好处是有了这套通信协议的定制和程序的实现,以后有关于控制服务器的操作的相关项目中,都能很快的修改少量的通讯协议或程序就可以轻松实现,无论控制终端是控制终端还是其他的一些设备,都可以达到控制服务器的效果。因为他都是在底层实现了串口的通讯,从而通过串口实现了控制服务器的目的。
文档编号H04L29/06GK101795270SQ201010011849
公开日2010年8月4日 申请日期2010年1月12日 优先权日2010年1月12日
发明者段国栋 申请人:山东高效能服务器和存储研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1