首页 / 专利库 / 软件 / 逻辑文件 / 一种基于串口的服务器控制方法

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

阅读:218发布:2023-12-31

专利汇可以提供一种基于串口的服务器控制方法专利检索,专利查询,专利分析的服务。并且本 发明 提供一种基于串口的 服务器 控制方法,该方法的功能是通过定制通信协议,根据协议的要求通过串口通信程序把所需要的数据发送出去,然后利用控制终端可以显示出来数据也可以来控制服务器。该方法的好处是有了这套通信协议的定制和程序的实现,以后有关于控制服务器的操作的相关项目中,都能很快的 修改 少量的通讯协议或程序就可以轻松实现,无论控制终端是控制终端还是其他的一些设备,都可以达到控制服务器的效果。因为他都是在底层实现了串口的通讯,从而通过串口实现了控制服务器的目的。,下面是一种基于串口的服务器控制方法专利的具体信息内容。

1.一种基于串口的服务器控制方法,其特征在于,定义串口通讯协议的数据包格式,其中定义包括发送的格式和发出的格式、发送采用的波特率和字符编码,根据协议的要求通过串口通信程序把所需要的数据发送出去,显示到控制终端上或通过控制终端利用串口通信程序实现控制服务器,具体实现步骤如下:
一、定制串口协议规则,包括串口的参数
当串口向系统发送数据是指控制终端通过响应事件来设置所要的数据,把数据的信息以字符的形式发送给系统,以下通一简称为“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/下,同时在考到/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();用写入串口字节,然后清除缓存区,这样保证每次都发送的数据是最新的。

说明书全文

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

技术领域

[0001] 本发明主要是涉及到利用各种终端通过串口控制服务器的各种项目中,尤其是控制服务器的基本操作或是从服务器取得各种信息显示在终端上的方法。

背景技术

[0002] 目前嵌入式系统最常用的接口就是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,Linux,Macos X,Solaris操作系统下的兼容javax.comm串口通讯包API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便。针对x86体系结构的Linux操作系统平台,RXTX的部署包括下面几个文档:
[0003] *RXTXcomm.jar RXTX自己的javax.comm实现
[0004] *librxtxSerial.so由RXTXcomm.jar调用的底层串口库文档
[0005] *librxtxParallel.so由RXTXcomm.jar调用的底层并口库文档
[0006] *javax.comm.properties RXTX驱动的类配置文档,内容是Driver=gnu.io.RXTXCommDriver
[0007] 当我们在测试的时候,发现sun公司提供的驱动包,当底层发送数字10的时候,发送的时候就会出现问题。他底层实现就会自动多发一个字节的数据。所以现在用的是rxtx包。他是考配置文件来该所使用的端口。用rxtx包,修改的程序不需要大的改动。

发明内容

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

具体实施方式

[0038] 为了使本发明的目的、技术方案和优点更加清晰,下面结合附图和实施例,对本发明作以下详细说明:
[0039] 内容如下:
[0040] a:定制串口协议规则。(包括串口的参数),主要定制从串口发送的数据包格式和从串口发出的数据包格式。
[0041] b:配置驱动程序,加载驱动程序包,配置串口需要的配置文件,并使得程序找到对应的驱动包。
[0042] c:初始化串口程序,指后台程序初始化串口,并打开串口,注册监听事件。
[0043] d:数据格式的优化操作,指发送数据之前的数据优化操作。
[0044] 实施例
[0045] 一:定制串口协议规则。(包括串口的参数)
[0046] 当串口向系统发送数据是指控制终端通过响应事件来设置所要的数据,把数据的信息以字符的形式发送给系统。以下通一简称为“serial到system”。当系统向串口发送响应的数据是指系统收到有效的信息后,做出的相应的处理结果,把结果以字符的形式发送给串口。以下统一简称为“system到serial”无论从system到serial还是serial到system都是以字符的形式发送且字符编码都是Unicode
[0047] A:定义串口的初始化参数,波特率设置:统一都设置为为9600。
[0048] 数据位8位,停止位1,奇偶校验无。
[0049] B:定义从控制终端通过串口发送数据到系统的数据格式。定义了包头,命令,信息长度,信息位,数据,包尾,校验和。这样严格的定义才能保证在当受到外界或干扰的情况下,有可能数据遗漏或出错的情况下,才可能保证数据的完整性。我们规定包头统一用#号,命令分别用到FGVCRDT字母,信息长度是统计信息位和数据的字节数的总和,这样是保证当出错了,但是校验和刚好和正确的时候的校验和一样的时候,有了这个的校验,跟能保证数据的严谨性。信息位:是判断受到的数据正确与否和收到正确的数据后,执行系统命令正确与否。当要收到错误命令的时候标志位为E,当执行系统命令出错的时候返回F正确的时候返回T。数据位:当有数据的时候返回实际的数据,当没有数据返回0.包尾:*号。校验和:指的是所有从包头到包尾的ASCII码(十进制)的总和(4个字节,如果不够4字节时,前面的字节补0)同理配置从系统通过串口发送到控制终端配置的数据格式也分为包头,命令,信息长度,信息位,数据,包尾,校验和。但是从系统通过串口发送到控制终端的信息位和数据是不一样的,其他的都一样,因为这里的标志位代表执行系统的命令是否正确,数据位代表要取的的数据。校验和还是算的从包头到包尾的ascii码的和,也是用四个字节表示。
[0050] 二:配置驱动程序
[0051] RXTX是一个提供串口和并口通信的开源java类库,由该项目发布的文件均遵循LGPL协议。
[0052] A:修改javax.comm.properties RXTX驱动的类配置文件,内容是Driver=gnu.io.RXTXCommDriver serpath0=/dev/ttyS0这里的ttys0代表是串口1。如果你用的是串口2把这里修改成ttys1就可以。
[0053] B:把下 载 下来 的rxtx解 压后,另外 还有 linux/solaris/windows/mac的目录,这是RXTX针对不同平台的动态链接库。我的处理器是i386,所以就是i686-unknown-linux-gnu下的so文件librxtxParallel.so,librxtxSerial.so两个文件考到$JAVA_HOME/lib/下,同时在考到
[0054] /jre/lib/i386下。
[0055] C:把javax.comm.properties 文件考到$JAVA_HOME/jre/lib下。
[0056] D:最后把RXTXCommon.jar添加到你的工程里。
[0057] 注意:如果你用ide工具如eclipse编译用上边的方法可以。如果用命令编译:你还的把RXTXCommon.jar拷贝到$JAVA_HOME/jre/lib/ext目录下。才能用命令编译。
[0058] 三:初始化串口程序
[0059] 这里的初始化指的的后台程序进行的初始化,包括初始化串口的端口号,串口的传输速率,端口时超时时间,串口的数据位,串口的停止位。因为我们是操作控制终端来触发的事件,所以让串口的继承erialPortEventListener这个类。然后让他实现是该类的public void serialEvent(SerialPortEvent serialevent)这个方法。然后让事件监听注册到串口类中:
[0060] serialport.addEventListener(this)。最重要的是得到输入和输出流,如:in=serialport.getInputStream();out=serialport.getOutputStream();利用输入输出流来操作得到和输出的数据。当都初始化成功返回该串口对象,当调用完之后必须关闭串口,out.close(),in.close()。这里主要说一下监听读取数据和串口发送数据的方法。监听的判断依据就是当有数据的时候就接受:
[0061] serialevent.DATA_AVAILABLE==serialevent.getEventType()。接受时设了一个字节缓存区,每次有数据的时候发数据放到缓存区中,其中有个小技巧就是控制终端发送的校验和是float类型,接受过来的时候要把他转换成float后,在和前面的数据一起合并后把他传给业务逻辑层。当业务逻辑层把数据处理后传回来时,由串口public void writePort(byte[]result)方法负责把数据通过串口传到控制终端上,此方法然后调用public void writePort(byte b)方法,该方法out.write(b);out.flush();用写入串口字节,然后清除缓存区,这样保证每次都发送的数据是最新的。
[0062] 四:数据格式的优化操作
[0063] 当通过串口接收到数据,把数据返回给业务逻辑层来处理数据,这里用到了大量的优化数据的操作。
[0064] A:判断接收到的数据是否正确,用
[0065] Pattern.compile(″#[T,D,R,C,V,G,F]0200\\*\\d+″);来匹配正确的数据包,此处用到的匹配方法就是通讯协议定义的格式,当不匹配的时候直接按照铜须协议定义的发送给串口的数据格式返回一个错误指令,即信息标志位为E,表示接收的数据有问题。当正确的时候,把这个正确的字符串返回给public booleanmesglength(String m)这个方法,此方法是判断校验和是否正确,不正确也是把标志位为E。正确后调用public String realString(String m)方法,此方法是把正确的数据包的字符串置成全局变量。
[0066] B:执行public String getCommand(String m)方法,此方法是分解出所要执行的命令关键字,然后根据命令调用不同的执行方法对应的执行的底层的命令,底层对象取得数据后,把信息位置为F或T,分别代表执行错误,执行正确的标志。把取得的数据放到数据位上。
[0067] C:串 口 通 过 初 始 化 业 务 逻 辑 类 public class HandleString,调 用publicFlagBean syscommand(String m)方法,此方法就是调用刚才执行命令的方法,此方法返回一个不带校验和的数据包格式的字符串。
[0068] D: 初 始 化 优 化 类 ReturnString 后, 调 用 public byte[]returnbytes(FlagBeanflag)方法,此方法就是把刚才得到的数据包字符串,无论是正确的还是错误的都可以调用此方法,是一个通用方法,此方法会调用public byte[]covbyte(FlagBean flag)方法,为了就是根据不同的命令来区分不同的数据发送格式,按照通讯协议的格式来优化,把他们调优成对应的字节格式,包括把一个整数类型转换成一个字节,这是比以往做串口程序优化的,以往是把数据当字符串发给串口的,然后串口底层是自己转换的,而此方法是做到底层之上的。执行完此方法返回给一个字节数组,此时的字节数组就是一个完整的数据包格式,但是不带校验和,然后returnbytes方法在根据这个数组算出校验和,统一放到一个字节数组里,返回给串口发送端,串口发送端public void writePort2(byte[]result)方法。此时就是一个完整的过程。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈