本发明属于雷达系统通讯领域,涉及雷达通讯协议与通讯方法,用于实现雷达通讯协议的通用化。
背景技术:
随着雷达技术的发展,雷达型号越来越多、雷达产品不断升级改造,伴随着新需求的增加,雷达分系统的通讯协议、应用程序接口不断增加,各分系统之间的通讯协议互不兼容,为保证设备间的互操作性,就必须针对每一个分系统做通讯协议和软件接口。同时,相同类型的分系统中,有时相同的数据甚至相同的功能,由于在不同的应用中使用,就必须重新开发,增加了系统成本和维护的复杂性,导致各分系统的调试时间主要集中在通讯协议的转换上。
技术实现要素:
为了克服现有技术的不足,本发明提供一种雷达通讯方法,通过使用统一格式的通用通讯协议,开发基于C++标准的链接库,支持多种通讯接口,提高通讯协议的复用性,解决了分系统通讯协议的重复开发问题,并且协议实现分层设计,使得上层应用程序不需要了解具体的协议格式,模块调用简单。
本发明解决其技术问题所采用的技术方案包括以下步骤:
(1)给雷达设备的每个分系统进行唯一对应的编号;
(2)将各个分系统的命令和状态数据按照固定、专用和通用三种类型进行区分;固定命令是指不同分系统中含义与格式相同的命令,通用命令是指同类型分系统的相同命令,专用命令是指某分系统独有的命令;固定状态是指不同分系统中含义与格式相同的状态,通用状态是指同类型的分系统的相同状态,专用状态是指某分系统独有的状态;对各个分系统的命令和状态数据进行唯一对应的编号;
(3)当一个分系统向其他分系统发送命令时,命令包括发送分系统编号、命令响应标志、命令序号、接受分系统编号、命令编号、发送次数、数据生成时间、版本号、命令参数长度和命令参数;所述的命令响应标志来确定该条命令是否需要命令响应;
(4)如果命令发出后,发送分系统在设定的时长内未接收到接收分系统反馈的命令响应,则将该条命令的发送次数加1,若发送次数没有超过设定的发送次数上限,则再次发送该条命令;
(5)接收分系统接收到命令后,按照命令参数执行相关操控,并向发送分系统发送状态报告,状态报告包括分系统数、分系统编号、分系统状态数据包长度、分系统状态数k、状态编号、状态数据长度和状态数据;所述的分系统状态数据包包括状态编号、状态数据长度和状态数据;各个分系统发生故障时主动向操控终端发送状态报告;
(6)发送分系统接收到状态报告后进行解析,得到接收分系统的工作状态。
本发明的有益效果是:实现了雷达数据通讯的模块化功能,保持了雷达数据通讯模块的通用性、独立性、扩展性及先进性,具有很好的兼容性与测试性。雷达通讯协议可扩展,当有特殊协议时,只需增加特殊协议转换模块,在协议层将特殊协议格式转换成通用协议格式,不影响整个处理流程。
本发明采用的协议头中包含了命令发送方分系统编号以及接收方分系统编号,当接收方收到命令时,可判断出当前命令是哪个分系统发送的,发送给谁的。当在大型软件系统中,某一软件与多个软件进行通讯时,通过分系统编号可确定该条命令是发送给哪个分系统的,同时接收方的分系统可知该条命令是哪个分系统发送的。这样,分系统可明确知道该条命令是否是发送给自己,同时回馈信息时,也知道应向哪个分系统发送信息。
本发明采用数据重发机制来实现传输的可靠性,当发送方发送的命令需要接收方收到后告知发送方已收到数据,则接收方接收到信息后立刻返回一条命令响应信息,告知发送方已成功接收,并自动向上层提交命令发送成功消息;否则,发送方将重新发送该条命令,重新发送的次数可由用户自行设定,当达到指定的发送次数时自动向上层提交命令发送失败消息,可以帮助用户快速定位问题和解决问题。
本发明对数据参数具有数据边界判断的处理能力,能够提交错误代码,可设置成调试模式,将链路层和协议层的处理的数据内容和时标,以日志的形式打印到本地文件,便于用户分析数据与调试。
本发明能够采用标准C/C++语言开发,可在Windows操作系统、Linux操作系统、VXWorks操作系统上运行,提供动态链接库与头文件,采用库函数调用的方式使用。
附图说明
图1是通用通讯协议格式划分的示意图;
图2是功能模块结构示意图;
图3是本发明的实施步骤图。
具体实施方式
下面结合附图和实施例对本发明进一步说明,本发明包括但不仅限于下述实施例。
本发明适用于软件通讯模块设计,实现软件通讯模块的标准化、模块化。可应用于所有基于C/C++语言开发的软件,为数据通讯提供协议标准,实现软件之间的互联互通功能。
本发明支持状态和命令的组包、解析、发送、接收、特殊协议转换、未知格式处理、调试打印等功能。
通用通讯协议分为控制命令协议和设备状态协议。通讯协议制定的思想基于面向对象模式,将各分系统进行分类,同一类型的分系统再次分类,提取相同的状态或者控制命令。根据类型,状态、控制命令可划分为固定、通用和专用三种。该协议已经在多个型号项目上成功应用,调试过程中节省了大量的重复工作。
(一)控制命令协议
(1)报文类型分为命令报文和命令响应报文。
a)命令报文:该报文为雷达的控制命令。如需回发命令响应的报文,则接收到报文后,应立即发送命令响应进行确认,发送方在一定时间后如未接收到命令响应,则需采用三次重发机制,如三次都无命令响应,则发送失败,进行故障处理;如不需要回发命令响应的报文则无须回应。
b)命令响应报文:对需要命令响应的报文进行回应,且该报文不需要命令响应。
(2)协议格式
a)发送设备编号
发送设备编号:为发送命令的设备编号。
b)命令响应标志
通过命令响应标志来确定该条命令是否需要命令响应,0为不需要命令响应,1为需要命令响应。
c)命令序号
指程序运行后所有发送命令报文的连续编号,发送一次命令加1,初始为0,当超过65535后从1开始循环;该命令序号用于发送方和接收方之间的命令握手响应。发送方负责维护命令序号在一段时间内的唯一性。接收方在收到需要命令响应的报文后,回发以该命令序号作为参数内容的命令响应报文,用于命令的响应。
d)受控设备编号
为受控设备编号。
e)命令编号:
为该条报文的编码。
f)发送次数
报文重发次数,第一次为0,最大为2。
g)数据生成时间
报文生成时间,32位字,以00时00分00秒开始计时的累积时间值,单位为秒。
h)版本号
指程序运行开始后的本“命令编号”标识的命令的连续编号,每一次修改加1,初始为0,当超过65535后从1开始循环。
i)参数长度
为具体参数内容的数据长度。
j)命令参数
具体命令的参数,不同的命令有不同的解释。如该报文为命令响应,则参数内容为收到的命令序号。
k)协议分类
固定命令:不同分系统的命令含义与格式相同,如所有分系统状态都有“自检”命令。
通用命令:同类型的分系统的相同命令,如不同类型的发射机都有“功率辐射”命令。
专用命令:某分系统独有的命令。
l)控制命令协议定义
命令编码0x00-0x1F,为固定数值命令,有参数;
命令编码0x20-0x3F,为通用数值命令,有参数;
命令编码0x40-0x7F,为专用数值命令,有参数;
命令编码0x80-0x9F,为固定命令段,无参数;
命令编码0xA0-0xBF,为通用命令段,无参数;
命令编码0xC0-0xFF,为专用命令段,无参数。
(二)状态报告协议
(1)协议说明
状态协议用于雷达各分系统之间的状态数据通讯。状态报文有三种发送方式:即时、定时、查询。数据传输为多字节时,低字节在前,高字节在后。
(2)协议格式及解释
雷达状态报告格式:
分系统数n(1byte)+分系统1状态报告+分系统2状态报告+……+分系统n状态报告;
分系统状态报告格式:
分系统编号+分系统状态数据包长度+分系统状态数据包;
分系统状态数据包格式:
分系统状态数k(1byte)+分系统状态1+分系统状态2+……+分系统状态k;
分系统状态格式:
格式1(数值状态类型):状态编号+数据长度(2byte)+状态数据;
字符串格式:
字符串长度+字符串内容
其中,状态编号至状态数据部分可重复k次;分系统编号到状态数据可重复n次。
当各分系统某一状态发生改变时,按照状态协议将当前变化的状态组包,向雷达发送;
当各分系统接收到雷达发送的“获取状态报告”命令时,按照状态协议将该分系统的所有状态数据组成一包数据,向雷达发送;
当各分系统发生故障时应主动定时向雷达发送故障状态。
a)分系统数
表示状态报告中所含有的分系统数,
长度:1Byte。
b)分系统状态报告
雷达站分系统的状态报告数据包,包含分系统编号、分系统状态数据长度、分系统状态数据。
c)分系统编号
由雷达监控系统规定的统一编号,该编号用于监控系统标识雷达站各分系统;
长度:1byte。
d)分系统状态数据包长度
按字节计算的分系统状态数据长度;
长度:1Word。
e)分系统状态数据包
分系统本次报告的所有状态组成的数据包。
f)分系统状态数
表示该分系统状态数据包中所含有的状态数。
g)分系统状态
分系统单一状态的具体内容。
h)状态编号
分系统定义的表示某种状态含义和数据结构的编号。
i)数据长度
用于数值状态类型,表示数据占用的字节数;
长度:1word。
j)数值状态
数据长度(1Word)+数据内容(长度可变)。
k)报告分类
固定状态:不同分系统的固定状态含义与格式相同,如所有分系统状态都有“电源”状态和“故障”状态。
通用状态:同类型的分系统的相同状态,如不同类型的发射机都有“累计工作时间”状态。
专用状态:某分系统独有的状态。
数值状态:状态报告内容具有不同的解释方法,由数据长度+数据内容构成。
l)报告编码协议定义
状态编码0x00-0x3F,为固定数值状态,有参数;
状态编码0x40-0x9F,为通用数值状态,有参数;
状态编码0xA0-0xFF,为专用数值状态,有参数;
状态与命令的含义:
●固定状态/控制命令:所有分系统公有的状态或者控制命令,如联机状态、获取状态命令等;
●通用状态/控制命令:某一类分系统公有的状态或者控制命令;
●专用状态/控制命令:分系统特有的状态或者控制命令。
(三)设计指标
雷达通讯协议功能模块设计按照分层设计的思想,将模块分为通讯层、协议层和应用层。通讯层负责物理链路的通讯,包括数据的发送和接收;协议层负责协议格式的转换,包括命令和状态的组包、解析;应用层负责处理数据内容,不涉及到具体的协议格式。具体功能如下:
●程序调用
程序调用时,只需要设置分系统编号、命令编号和命令参数,或者分系统编号、状态编号和状态参数,不需要了解具体的协议格式。
●命令组包
用户通过调用接口,输入分系统编号、命令编号和命令参数,组包模块自动按照协议格式生成命令数据。如果需要特殊协议的转换,则对协议进行转换。
●命令解析
对接收的命令数据进行解析,解析成分系统编号、命令编号和命令参数,发送给应用层。如果发现无法解析的命令格式,则将数据发送给应用层处理。
●状态组包
用户通过调用接口,输入分系统编号、状态编号和状态参数,组包模块自动按照协议格式生成状态数据。如果需要特殊协议的转换,则对协议进行转换。支持所有状态定时发送机制。
●状态解析
对接收的状态数据进行解析,解析成分系统编号、状态编号和状态参数,发送给应用层。如果发现无法解析的状态格式,则将数据发送给应用层处理。
●数据发送
根据分系统编号,选择具体的通讯方式进行发送。并支持数据重发机制(一定时间内没有收到对方的应答,则重复发送数据)。
●数据接收
在通讯链路上接收数据,将数据分发给解析模块。如果需要数据响应,则进行自动应答。
●特殊协议转换
对于某些已经固化协议格式的外购设备,可通过特殊协议转换模块,在协议层将外购设备的协议格式转换成通用协议格式,不影响整个处理流程。
●未知格式处理
对于无法解析的格式,将直接分发到应用层,由应用层决定如何使用。
●调试打印
可设置成调试模式,将链路层和协议层的处理的数据内容和时标,以日志的形式打印到本地文件,便于调试。
本发明包括以下步骤:
(1)区分出雷达设备中的各分系统,并给每个分系统进行编号,如给发射机编号为0x20,操控终端编号为0x10;
(2)将雷达设备中的各分系统的命令和状态数据按照固定、专用和通用三种类型进行区分。对于发射机来说,开辐射是其同类设备的通用命令且该命令无需参数,命令编码可在0xA0-0xBF中定义,如定义开辐射命令为0xA0;发射机辐射状态为同类设备的通用命令且该状态需参数,状态编码可在0x40-0x9F中定义,如定义发射机辐射开状态定义为0x40,参数0代表关,1代表开;
(3)操控终端向雷达发送控制命令时按照控制命令格式发送。如操控终端向发射机发送开辐射命令,则先填写操控终端设备编号;该命令需要命令响应则命令响应标志置为1;命令序号为操控终端向外发送命令的序号,每发送一条加1,假设开辐射命令为第1条命令;填写发射机编号;开辐射命令编号为0xA0;发送次数为该条命令再是三次重发中的第几次;数据生成时间为该命令发送时的系统时间,假设时间为01:02:03;依据开辐射命令在整个系统运行过程中发送的第几次进行填写;开辐射命令无参数故参数长度为0;命令参数为空。因此发射机开辐射命令为0x10 0x01 0x01 0x00 0x20 0xA0 0x00 0x03 0x 02 0x01 0x00 0x01 00 0x00 0x00。
(4)如果需要重发的命令发出后,1秒内未接收到命令响应,则将该条命令的发送次数+1,再次发送;
(5)当分系统接收到控制命令后,执行相关操控并回馈自身状态。如发射机接收到开辐射命令后,自动打开辐射,按照状态通讯协议向操控终端回馈辐射开状态。分系统数为1;分系统编号为0x20,分系统状态数据包长度时分系统状态数、状态编号、数据长度和状态数据的字节总和;只回馈辐射开状态,因此分系统状态数为1;辐射开状态编号为0x40;辐射开状态含有1个参数,则数据长度为1;1代表辐射开因此状态数据为1。因此发射机辐射开状态为0x01 0x20 0x05 0x00 0x01 0x40 0x01 0x00 0x01。
(6)操控终端接收到发射机辐射开的状态后按照协议格式依次进行解析,即可得到发射机辐射的开关状态。
本发明具有如下特点与功能:
支持网络TCP/IP、UDP协议,RS-232/485/422等串行接口的通讯;
对数据参数具有数据边界判断的处理能力;
具有容错能力,并能提交错误代码;
具有数据重发机制;
对需要命令响应的数据包具有回馈命令响应的功能;
发送数据时能提交发送成功与失败的消息;
发送数据队列中可存储≥1000条数据;
可对最大8KB数据进行发送与接收;
最大占用系统内容8MB;
采用标准C/C++语言开发;
可在Windows操作系统、Linux操作系统、VXWorks操作系统上运行;
提供动态链接库与头文件,采用库函数调用的方式使用。