CN108664621B - 基于Labview和STK的显示系统的设计方法 - Google Patents
基于Labview和STK的显示系统的设计方法 Download PDFInfo
- Publication number
- CN108664621B CN108664621B CN201810454553.2A CN201810454553A CN108664621B CN 108664621 B CN108664621 B CN 108664621B CN 201810454553 A CN201810454553 A CN 201810454553A CN 108664621 B CN108664621 B CN 108664621B
- Authority
- CN
- China
- Prior art keywords
- stk
- instruction
- function
- display
- labview
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
Abstract
一种基于Labview和STK的显示系统的设计方法,它涉及一种显示系统的设计方法。本发明的目的是通过调用DLL的方式来实现Labview端对STK端的显示控制。所述方法基于STK的显示功能和Labview的工程设计功能,通过STK的Connect模块、Labview的VISA接口和建立状态机项目,实现不同终端之间使用Labview控制STK的功能;所述方法实现过程为:创建一个可被Labview调用的STKCONNECT.dll;串口传输过程;显示系统主体设计与实现,使用事件结构与循环结构嵌套的状态机作为显示系统主体整个程序的架构。本发明适于控制端与显示端分离的实际需求。
Description
技术领域
本发明涉及一种显示系统的设计方法。
背景技术
Labview是一种图形化编程语言,相比于文本编程语言,其最大的优点就是强大的前面板设计功能。卫星工具包STK(Satellite Tool Kit)是由AGI公司开发,用于三维仿真和系统分析的软件。它广泛应用于航天,情报,雷达,电子对抗,导弹防御等领域。STK包含先进的分析模块,高精度轨道生成函数,长周期轨道预测器,生命周期,地形以及高分辨率地图,使得它可提供逼真的二维,三维可视化动态场景以及精确的图表,报告等多种分析结果。以Labview作为第三方调用STK的方式目前主要有两种。分别是使用Labview的ActiveX插件和库函数调用节点来调用STK中相应的插件和DLL。前者受限于调用过程整体过于顶层的原因,无法看到STK端相应的底层函数,可实现命令范围受限,纠错困难,整个调用系统繁琐且不稳定。
发明内容
本发明的目的是提供一种基于Labview和STK的显示系统的设计方法,通过调用DLL的方式来实现Labview端对STK端的显示控制。
本发明为解决上述技术问题采取的技术方案是:
一种基于Labview和STK的显示系统的设计方法,所述方法基于STK的显示功能和Labview的工程设计功能,通过STK的Connect模块(又称STK的CON模块、STK/CON或CONNECT模块)、Labview的VISA接口和建立状态机项目,实现不同终端之间使用Labview控制STK的功能;
所述方法实现过程为:
步骤一、创建一个可被Labview调用的STKCONNECT.dll,用于Labview主程序端对STK的调用;STKCONNECT.dll中包涵CONNECT模块初始化函数、打开连接函数、发送指令并接收数据函数以及关闭连接的函数;
步骤二、串口传输过程:
当显示系统与实体主程序在不同的终端上运行时使用串口在两者之间进行信息传递,利用Labview中的VISA系列VI(虚拟仪器)进行数据传输;实体主程序对应数据发送端,显示系统对应数据接收端;在收发终端上安装NI(美国NI公司)的VISA驱动;串口传输过程的实现如下:
在数据发送端和数据接收端使用的VI前面板,在VI中选择串口的端口号,对所选端口进行设置,其中参数的设置包括串口的波特率、数据位、XON/XOFF字符设置以及终止符时结束读取/写入以及终止符的选择设置,收发两端的参数要设置一致;
步骤三、显示系统主体设计与实现,使用事件结构与循环结构嵌套的状态机作为显示系统主体整个程序的架构;状态机用于使用串口接收消息、将消息转化为STK可接收指令、将指令送入STK实现显示;通过状态机不同状态之间的转换实现显示系统将指令写入文档和送入STK进行显示。
进一步地,对步骤一中四个函数的描述如下:
CONNECT模块初始化函数为AgConInit()函数,使用AgConInit()函数初始化CONNECT模块,所述初始化函数AgConInit()的函数原型是int AgConInit(char*initFileName),其中参数initFileName指向初始化配置文件,int表示程序语言中的整型;“char*”表示字符串指针;
若initFileName参数为空,CONNECT模块将使用缺省配置文件;若初始化成功,STK将返回AgCNoError消息,反之将返回AgCError消息;初始化配置文件中列出了拥有返回数据的CONNECT命令,所述命令是第三方程序获得STK数据的有效途径;初始化配置文件中还包含用于建立连接时CONNECT模块的参数设置的配置信息;
在初始化完成后,使用AgConOpenSTK()函数打开与STK的连接,AgConOpenSTK()函数原型如下:
int AgConOpenSTK(
char**context,
char**connectType,
char**connectName);
其中,参数connectType用于指定连接的类型,参数connectType只能为以下两个常量之一:“UNIXSOCKET”,“TCPSOCKET”;其中前者只用于UNIX操作系统;char**表示指针的指针;
connectName参数在基于TCP/IP协议的连接中指定了主机名和通讯端口号;同时,参数context是在应用程序同时打开多个STK的连接情况下用于区分这些连接的参数;
在完成初始化和连接工作之后,将使用发送指令函数AgConProcessSTKCmd()发送命令以及接收数据,
所述发送指令函数的原型如下:
int AgConProcessSTKCmd(
char**context,
char**cmdString,
AgTConReturnInfo**returnInfo);
参数context用于区分接受命令不同的连接,cmdString包含命令的具体内容;returnInfo参数以结构的形式存储STK返回的数据,returnInfo的定义如下:
typedef struct AgTConReturnInfo
{char hdrType[AgCRMHAHdrTypeLen+1];
char tranId[AgCRMHAHdrIdLen+1];
int numEntries;
char**returnList;
}AgTConReturnInfo;
其中,
AgTConReturnInfo表示returnInf结构体的名字;typedef struct表示returnInf结构体的类型;
hdrTyp和tranId用于异步通讯模式,存储类型及标识符信息;numEntries存储返回数据包的数目,returnList则存储每一个具体的数据包;发送指令函数AgConProcessSTKCmd()若成功访问STK,则返回消息AgCNoError,反之将返回AgCError消息;若命令正确发出但因某些因素导致STK拒绝响应,将返回消息AgCNackReturned;
执行完以上操作后,可关闭与STK的连接;如果只想关闭当前连接,可使用关闭连接函数AgConCloseSTK();若想彻底清除CONNECT静态库中申请的内存,完全终止与STK的连接,可使用完全终止连接函数AgConShutdownConnect();之后若想再与STK通讯,需重新进行初始化;
在创建STKCONNECT.dll时,按照以上初始化、打开连接、发送指令、关闭连接的过程,使用C++语言,将以上几个函数连接起来,生成一个整体的函数;由此生成的dll将在Labview主程序中使用调用库函数节点时被调用。
进一步地,步骤二中串口传输过程的实现过程还包括:
在发送端,将前面板所见命令显示部分直接与发送端主程序输出数据相连,并选择发送功能;在接收端,相应地打开数据读取功能,在前面板的读取缓冲区和响应这两个显示窗口显示的分别是当下读到的数据部分和分次读到数据的连接后的结果;其中,接收端数据位控件控制着每次读取时所读取的字符数,也就对应着读取缓冲区每次显示的字符数;
在接收发送和接收数据端,可分别把VISA读取VI和VISA写入VI放入循环中,使发送和接收都分别进入循环状态,实现连续的读写;但是在接收端存在一个等待时间,在接收端等待时间超过这个限定的等待时间门限之后,接收端将出现一个等待超时的报错;在无法控制发送端程序输出信息时间的情况下,在接收端每次接收前加等待时间,避免发生等待超时的问题。
进一步地,在步骤三中,将状态机设计为七个状态之间的转换,七个状态以及其中的子VI为:
状态一:写总指令文档
写总指令文档这个状态中,包含两个VI,分别是所述串口读取的VI和将接收到的信息加入字符串以形成STK标准指令并将所述标准指令继续写入总指令文档的VI:
先打开接收消息端的程序,为防止发生步骤二提到的等待超时问题,在接收端串口之前用顺序结构加入等待时间,以尽可能在收发两端保持严格同步;
将读取参数设置成每次需要读取的字符最大值或更大的数值,以保证在每次读取的数据中都至少可以提取出完整的一组有效信息;
提取出完整的有效信息后,需将其转换成STK标准指令格式;
状态二:写子指令文档1、子指令文档2:
在写入子指令文档1、子指令文档2状态中对状态一生成的总指令文档进行过滤;在每个循环开启的第一次发送动画开始运行的指令,以其为开头,以重复的动画开始指令为结尾,截取完整指令,并在结尾加入“End”结束标志写入子指令文档1,以便于STK端读取指令时若逐行读取,方便找到结尾;
在子指令文档1生成的同时,可再对其进行截取,截取方式可根据自身需求进行设置,生成子指令文档2,
用户可根据自己的需求更改对子指令文档1的截取条件,生成不同的子指令文档2;
状态三:写子指令文档3
在状态三中对状态二生成的子指令文档2进行局部修改以生成子指令文档3;在需要将上一次打开的显示的物体关闭、者改变物体颜色或改变物体位置的情况下用状态三来实现;
状态四:读子指令文档1
在STK中做显示准备以读取子指令文档1,实现显示控制;在显示准备过程中建立基本星座,其中包括主要物体的插入和主要物体的设置,主要插入的物体包括卫星、地点、通信链路,主要物体的设置包括整个动画时间段的设置、动画运行模式的设置;在动画运行模式部分选取STK的Realtime模式或者X-Realtime模式以完成实时显示;
状态五:显示等待
显示等待是指在上一个状态开启后显示状态向下运行的时长,显示等待可根据用户需求进行具体设定;
状态六:读子指令文档3
读取子指令文档3用于对物体颜色的更改和物体显示的关闭;
状态七:跳出状态机
本状态用于任意需要跳出状态机的时刻。
进一步地,在利用AgConInit()函数对CONNECT模块初始化过程中,对于PC机,缺省配置文件为CONNECT当前目录下的Connect.dat文件。
本发明的有益效果是:
基于Labview强大的界面设计功能和STK的2D、3D显示系统,本发明使用Labview调用STK中DLL的方式,来实现Labview端对STK端的显示控制,且考虑将两者放在不同的终端内实现,更加贴近于控制端与显示端分离的实际需求;建立强大的Labview端主程序架构,以实现添加修改各类功能的实际需求。从而在使用Labview作为主程序语言的情况下,加入本发明(本系统)改进后,就可以将主程序中的运行结果实时显示出来。相比之下,本发明使用调用库函数节点来调用STK中DLL的方式更加底层,可实现功能更多,检错也更加方便。
本发明实现了从Labview主程序端通过串口的方式将生成的指令发送到STK显示端,在显示终端通过Labview中库函数调用节点调用我们编写的STKCONNECT.dll的方式对STK端进行控制以实现实时显示主程序运行效果的目的。显示效果如图11至13所示。
附图说明
图1是STK端口设置图;图2是库函数调用节点配置图(函数配置),图3是库函数调用节点配置图(参数配置);图4是VISA串口前面板截图;图5是状态机示意图,图6是显示系统状态机示意图;图7是总指令文档截图,图8是子指令文档1截图,图9是子指令文档2截图,图10是子指令文档3截图;图11是建立星座图,图中a表示3D星座图,b表示2D星座图;图12是读子指令文档1动态显示图,图中a表示3D星座图,b表示2D星座图;图13是读子指令文档3动态显示图,图中a表示3D星座图,b表示2D星座图。
具体实施方式
具体实施方式一:如图1至13所示,本实施方式对本发明所述的基于Labview和STK的显示系统的设计方法的描述如下:
Labview是由美国NI公司开发一种基于C++的快速编程语言,目前在世界常用语言排名大约第三十位。它虽然是一种图形化编程语言,对于长期使用文本编程语言的工程师来说,从文本到图形化需要一个思维转换的过程,但在习惯Labview的图形化之后会慢慢发现其强大优势。首先,对于那些对界面要求较高的工程项目来说,Labview有着得天独厚的界面自定义优势;其次,在Labview中基于循环结构,事件结构和序列的状态机和队列消息处理器模型为工程实现提供了强大的支持。
卫星工具包STK(Satellite Tool Kit)是由AGI公司开发,用于三维仿真和系统分析的软件。它广泛应用于航天,情报,雷达,电子对抗,导弹防御等领域。STK包含先进的分析模块,高精度轨道生成函数,长周期轨道预测器,生命周期,地形以及高分辨率地图,使得它可提供逼真的二维,三维可视化动态场景以及精确的图表,报告等多种分析结果。
基于STK强大的显示功能,我们从Labview的工程角度出发,通过STK的Connect模块,Labview的VISA接口,建立状态机项目,从而实现不同终端之间使用Labview控制STK的功能。
第一步:STK的CON模块以及STKCONNECT.dll的创建
STK/CON是STK与外界的连接模块,它包括一系列的功能来打开UNIX或TCP/IP到STK的接口,以便给STK发送命令和接收从STK返回的数据,并在通讯完成后关闭接口。Connect具有提供信息的功能,可按用户规定的各种方式输出错误信息和诊断信息。如果需呀,用户还可取消此信息使他满足自己的需求。使用Connect需要提供连接名和端口,以便STK驻留和打开接口,其示意图如图1。
我们要创建一个可被Labview调用的STKCONNECT.dll,用于Labview主程序端对STK的调用。STKCONNECT.dll中需包涵初始化CONNECT模块,打开连接,发送指令并接收数据,以及关闭连接的函数。
初始化CONNECT模块时需使用初始化函数AgConInit(),它的函数原型是intAgConInit(char*initFileName),其中参数initFileName指向初始化配置文件。若initFileName参数为空,CONNECT将使用缺省配置文件,对于PC机,该文件为CONNECT当前目录下的Connect.dat文件。若初始化成功,STK将返回AgCNoError消息,反之将返回AgCError消息。初始化配置文件中列出了拥有返回数据的CONNECT命令,这些命令是第三方程序获得STK数据的有效途径。此外,初始化文件中还包含一些必要的配置信息,用于建立连接时CONNECT模块的参数设置。
在初始化完成后,我们需要打开与STK的连接。这部分使用AgConOpenSTK()函数,其原型如下:
int AgConOpenSTK(
char**context,
char**connectType,
char**connectName
);
其中,参数connectType用于指定连接的类型,它只能为以下两个常量之一:“UNIXSOCKET”,“TCPSOCKET”。其中前者只用于UNIX操作系统。connectName参数在基于TCP/IP协议的连接中指定了主机名和通讯端口号,例如Localhost:5001。同时,参数context是在应用程序同时打开了多个STK情况下用于区分这些连接的参数。
在完成了初始化和连接工作之后,我们将使用最终的发送指令函数。AgConProcessSTKCmd()函数用于发送命令以及接收数据。它的原型如下:
int AgConProcessSTKCmd(
char**context,
char**cmdString,
AgTConReturnInfo**returnInfo
);
参数context用于区分接受命令不同的连接,cmdString则包含了命令的具体内容。returnInfo参数以结构的形式存储了STK返回的数据,它的定义如下:
typedef struct AgTConReturnInfo
{
char hdrType[AgCRMHAHdrTypeLen+1];
char tranId[AgCRMHAHdrIdLen+1];
int numEntries;
char**returnList;
}AgTConReturnInfo;
其中,hdrTyp和tranId用于异步通讯模式,存储类型及标识符信息;numEntries存储返回数据包的数目,returnList则存储每一个具体的数据包。AgConProcessSTKCmd()若成功访问STK,则返回消息AgCNoError,反之将返回AgCError消息。若命令正确发出但因某些因素导致STK拒绝响应,将返回消息AgCNackReturned。
执行完以上操作后,可关闭与STK的连接。如果只想关闭当前连接,可使用函数AgConCloseSTK()。若想彻底清除CONNECT静态库中申请的内存,完全终止与STK的连接,可使用函数AgConShutdownConnect()。之后若想再与STK通讯,需重新进行初始化。
我们在创建STKCONNECT.dll时,即按照以上初始化,打开连接,发送指令,关闭连接的过程,使用C++语言,将以上几个函数连接起来,生成一个整体的函数。由此生成的dll将在Labview主程序中使用调用库函数节点时被调用,具体的调用配置如图2和图3:
第二步:串口传输
当显示系统与实体主程序在不同的终端上,也就是专门使用一台终端来做显示时,或者在同一台终端上,实体程序相对庞大独立时,我们仍需使用串口在两者之间进行信息传递时,需要用到的就是Labview中的VISA系列VI。目前台式机一般有一个物理串口,笔记本一般没有物理串口,需要安装虚拟串口。在两台收发终端上,我们都需要安装NI的VISA驱动。
在数据发送端和数据接收端我们使用的VI前面板如图4:
如图4,在这个VI中我们可以选择串口的端口号,对所选端口进行设置,其中设置参数包括串口的波特率,数据为等;另外还包括XON/XOFF字符设置,终止符时结束读取/写入以及终止符的选择设置。
在进行设置时非常重要的一点是收发两端要设置一致,否则将无法实现数据的正常收发。
在发送端,我们将前面板所见命令显示部分直接与发送端主程序输出数据相连,并选择发送功能;在接收端,相应地打开数据读取功能,在前面板的读取缓冲区和响应这两个显示窗口显示的分别是当下读到的数据部分和分次读到数据的连接后的结果。其中,读数控件非常重要,它控制着每次读取时所读取的字符数,也就对应着读取缓冲区每次显示的字符数。
在发送和接收数据端,我们可以分别把VISA读取VI和VISA写入VI放入循环中,这样发送和读取都分别进入了循环状态,也就实现了连续的读写;但是在读端存在一个等待时间,在读取段等待时间超过这个限定的等待时间门限之后,读取端将出现一个等待超时的报错。因此,在两端分别进行收发信息时,需要在时间上做控制,在无法控制发送端程序输出信息时间的情况下,我们可以在收端每次接收前加等待时间,避免发生等待超时的问题。
第三步:显示系统主体设计与实现
在以上两节我们分别实现了创建dll后完成Labview与STK之间的连接和两终端之间在Labview程序内实现串口数据的接收。剩下最主要的部分就是如何设计这个显示系统的主程序,从而实现我们将发送端的数据,如卫星编号数组,时间,位置等信息转化成STK端可接收指令,将指令送入STK以控制图像的显示,并且严格实现显示端信息跟随主程序变化实时改变显示效果,即时间上的同步问题。
在Labview中最主要的编程特点就是图形化编程,随之而来的问题就是无法像其他文本变成一样直接按照文本自上而下的顺序控制数据流,在Labview程序中,数据流的流向就是沿着变成中线的流向,从而时间顺序的问题很难控制,因此简单的设计程序都选择通过加入顺序结构来控制子程序之间的顺序,但是对于稍微复杂的程序来说,加入过多顺序结构会使得程序整体变得复杂,因此,在尝试顺序结构发现程序的运行效率不高后,我选择使用事件结构与循环结构嵌套的状态机作为整个程序的架构。
状态机示意图如图5:
从图5中,我们可以看出,在循环结构内,不同状态之间不断转换的程序架构即为状态机。传统的简单状态机可实现基本的状态间转换功能;基于事件结构的状态机则是将事件结构嵌套在循环结构之内,这样状态机则可根据前面板时间来做响应,已形成基于事件结构的状态机;JKI状态机则是在事件结构状态机的基础上在整个状态机结构中加入一个Idle状态,即空闲状态,即在下一状态为空的情况下就转入Idle状态;消息队列状态机则是更加强大的状态机,在整个状态机所包含状态数量很多,且状态之间转换不是逐一转换时,即在本状态执行完成后,接下来要执行的并非一个状态,而是一个状态序列;在此前提下,我们还可加入事件结构,形成事件结构消息队列状态机,其功能更加强大。
目前我们显示系统采用的是简单状态机架构,因为整体包含状态数有限,且不需要响应前面板事件。
考虑到整个状态机中要实现的功能包括使用串口接收消息,将消息转化为STK可接收指令,将指令送入STK实现显示这三点,我们将状态机设计为七个状态之间的转换。在这其中,我们使用将生成指令写入文档的方式,之后再读取文档,且文档之间存在转换和提取的关系,以使得程序理解起来更加简单,操作起来错误率更低,并且为保证程序运行的准确性,我们还可随时检查写入的文档,以确保准确无误。
显示程序的状态机结构如图6:
下面对七个状态以及其中的子VI分别做详细介绍:
状态一:写指令文档
写指令文档这个状态中,包含的两个重要的VI,分别是之前阐述过的串口读取VI和将接收到的信息加入一些字符串以形成STK标准指令,并将这些标准指令继续写入指令文档的VI。
首先,在发送和接收信息两端存在着严重的同步问题。一下我们以一个每30秒更新一次状态的主程序,即信息发送方为例,来考虑信息收发端的同步问题。一般情况下,我们需要首先打开接收消息端的程序,但为防止发生之前提到的等待超时问题,在接收端串口之前用顺序结构加入等待时间,以尽可能在收发两端保持严格同步。
在接收端和发送端,串口设置要求完全一致,这样两端才能顺利收发。将读书参数设置成每次需要读取的字符最大值或更大的数值,以保证在每次读取的数据中都至少可以提取出完整的一组有效信息。
提取出完整的有效信息后,需将其转换成STK标准指令格式。以下列举出一些常用指令的标准格式:
新建:如新建地点
New/*/Place Place2
在已存在物体上新建:如在地点上加接收机
New/*/Place/Place2/Receiver Receiver2
动画开始运动:
Animate*Start RealTime
设置位置:如设置地点的位置(LLA)
SetPosition*/Place/Place1 Geodetic 37.9-75.5 0.0
SetPosition*/Place/Place2 Geodetic 37.9-75.5 0.0
设置颜色:如设置卫星标签颜色
Graphics*/Satellite/gps1 SetColor 6 Label
Graphics*/Satellite/gps2 SetColor 6 Label
显示控制:如卫星显示或关闭
Graphics*/Satellite/gps1/Show On\Off
Graphics*/Chain/Chain1 Show On\Off
根据以上指令格式,我们将接收到的如控制显示或关闭的卫星号数组转化成其对应的卫星显示或关闭的指令,写入文档,生成总指令文档如图7:
在这个文档中,如前文所述,它包含着一次或一次以上完整的有效信息,因此,我们需要对其进行过滤。
状态二:写入文档12
在写入文档12状态中,我们要实现的就是状态一结尾所述,对状态一生成的指令文档的过滤。例如,在每个循环开启的第一次,我们都要发送动画开始运行的指令,我们便以其为开头,以重复的动画开始指令为结尾,截取完整指令,并在其结尾加入“End”等结束标志写入文档,以便于STK端读取指令时若逐行读取,方便找到结尾。以某次程序运行生成的指令文档1为例,子指令文档1如图8:
在指令文档1生成的同时,我们还可以再对其进行截取,截取方式可根据自身需求进行设置,生成指令文档2,如某次程序运行时,我将指令文档1中以“Graphics”开头的指令,即控制地理显示的指令截取出来,生成子指令文档2如图9:
用户可根据自己的需求更改对子指令文档1的截取条件,生成不同的子指令文档2。
状态三:写子指令文档3
在状态三中,我们是对上一状态生成的指令文档2进行局部修改,以生成指令文档3,大部分情况下,用户可能有此需求,比如将上一次打开的显示的物体关闭,或者改变物体颜色,改变物体位置等情况,因此我们需要状态三完成这个需求。
与上文子指令文档2所对应生成的子指令文档3如图10:
在这次转换中,我们将指令文档一中由默认颜色蓝绿色转换为红色的显示物体颜色调整回默认值,并将在指令文档1中打开显示的物体关闭,以便于下个状态的显示。
状态四:读指令文档1
读取指令文档即为控制显示。在显示之前我们需要做的前期工作是在STK中做显示准备。在显示准备过程中需要完成基本星座的建立,其中包括主要物体的建立,如卫星,地点,这些物体的基本设置,链路的建立,整个动画时间段的设置,动画运行模式的设置,在动画运行模式部分,如果要完成实时显示,应选取STK的Realtime模式或者X-Realtime模式。
如建立的星座图如图11所示:
其中主要包含了GPS星座的32颗星,以及每颗星上的信号发射器;地面上的地点,以及地点处安放的接收机;和接收机与卫星之间的链路。
在显示过程中,我们主要控制物体的显示或关闭显示,显示颜色和位置。在经历了状态四,读取指令文档1动画开始运行后在STK中的显示情况如图12:
在读指令文档的过程中,STKCONNECT.dll支持逐条读取指令送入或者整体读取每行都为标准指令格式的文档。
状态5:显示等待
所谓显示等待,顾名思义,就是希望在上一个状态开启的显示状态向下运行时长,此处可根据用户需求进行具体设定。
状态6:读指令文档3
此状态与状态5所实现功能一致,在读取指令文档3后,我们实现了对颜色的更改和物体显示的关闭,如图13所示。
状态七:跳出状态机
本状态用于任意需要跳出状态机的时刻。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (4)
1.一种基于Labview和STK的显示系统的设计方法,其特征在于,所述方法基于STK的显示功能和Labview的工程设计功能,通过STK的Connect模块、Labview的VISA接口和建立状态机项目,实现不同终端之间使用Labview控制STK的功能;
所述方法实现过程为:
步骤一、创建一个可被Labview调用的STKCONNECT.dll,用于Labview主程序端对STK的调用;STKCONNECT.dll中包涵CONNECT模块初始化函数、打开连接函数、发送指令并接收数据函数以及关闭连接的函数,具体描述如下:
CONNECT模块初始化函数为AgConInit()函数,使用AgConInit()函数初始化CONNECT模块,所述初始化函数AgConInit()的函数原型是int AgConInit(char *initFileName),其中参数initFileName指向初始化配置文件,int表示程序语言中的整型;“char *”表示字符串指针;
若initFileName参数为空,CONNECT模块将使用缺省配置文件;若初始化成功,STK将返回AgCNoError消息,反之将返回AgCError消息;初始化配置文件中列出了拥有返回数据的CONNECT命令,所述命令是第三方程序获得STK数据的有效途径;初始化配置文件中还包含用于建立连接时CONNECT模块的参数设置的配置信息;
在初始化完成后,使用AgConOpenSTK()函数打开与STK的连接,AgConOpenSTK()函数原型如下:
int AgConOpenSTK(
char**context,
char**connectType,
char**connectName);
其中,参数connectType用于指定连接的类型,参数connectType只能为以下两个常量之一:“UNIXSOCKET” ,“TCPSOCKET”;其中前者只用于UNIX操作系统;char**表示指针的指针;
connectName参数在基于TCP/IP协议的连接中指定了主机名和通讯端口号;同时,参数context是在应用程序同时打开多个STK的连接情况下用于区分这些连接的参数;
在完成初始化和连接工作之后,将使用发送指令函数AgConProcessSTKCmd()发送命令以及接收数据,
所述发送指令函数的原型如下:
int AgConProcessSTKCmd(
char **context,
char **cmdString,
AgTConReturnInfo**returnInfo);
参数context用于区分接受命令不同的连接,cmdString包含命令的具体内容;returnInfo参数以结构的形式存储STK返回的数据,returnInfo的定义如下:
typedef struct AgTConReturnInfo
{char hdrType[AgCRMHAHdrTypeLen+1];
char tranId[AgCRMHAHdrIdLen+1];
int numEntries;
char**returnList;
} AgTConReturnInfo;
其中,
AgTConReturnInfo表示returnInf结构体的名字;typedef struct表示returnInf结构体的类型;
hdrTyp和tranId用于异步通讯模式,存储类型及标识符信息;numEntries存储返回数据包的数目,returnList则存储每一个具体的数据包;发送指令函数AgConProcessSTKCmd()若成功访问STK,则返回消息AgCNoError,反之将返回AgCError消息;若命令正确发出但因某些因素导致STK拒绝响应,将返回消息AgCNackReturned;
执行完以上操作后,可关闭与STK的连接;如果只想关闭当前连接,可使用关闭连接函数AgConCloseSTK();若想彻底清除CONNECT静态库中申请的内存,完全终止与STK的连接,可使用完全终止连接函数AgConShutdownConnect();之后若想再与STK通讯,需重新进行初始化;
在创建STKCONNECT.dll时,按照以上初始化、打开连接、发送指令、关闭连接的过程,使用C++语言,将以上几个函数连接起来,生成一个整体的函数;由此生成的dll将在Labview主程序中使用调用库函数节点时被调用;
步骤二、串口传输过程:
当显示系统与实体主程序在不同的终端上运行时使用串口在两者之间进行信息传递,利用Labview中的VISA系列VI进行数据传输;实体主程序对应数据发送端,显示系统对应数据接收端;在收发终端上安装NI的VISA驱动;串口传输过程的实现如下:
在数据发送端和数据接收端使用的VI前面板,在VI中选择串口的端口号,对所选端口进行设置,其中参数的设置包括串口的波特率、数据位、XON/XOFF字符设置以及终止符时结束读取/写入以及终止符的选择设置,收发两端的参数要设置一致;
步骤三、显示系统主体设计与实现,使用事件结构与循环结构嵌套的状态机作为显示系统主体整个程序的架构;状态机用于使用串口接收消息、将消息转化为STK可接收指令、将指令送入STK实现显示;通过状态机不同状态之间的转换实现显示系统将指令写入文档和送入STK进行显示。
2.根据权利要求1所述的一种基于Labview和STK的显示系统的设计方法,其特征在于,步骤二中串口传输过程的实现过程还包括:
在发送端,将前面板所见命令显示部分直接与发送端主程序输出数据相连,并选择发送功能;在接收端,相应地打开数据读取功能,在前面板的读取缓冲区和响应这两个显示窗口显示的分别是当下读到的数据部分和分次读到数据的连接后的结果;其中,接收端数据位控件控制着每次读取时所读取的字符数,也就对应着读取缓冲区每次显示的字符数;
在接收发送和接收数据端,可分别把VISA读取VI和VISA写入VI放入循环中,使发送和接收都分别进入循环状态,实现连续的读写;但是在接收端存在一个等待时间,在接收端等待时间超过这个限定的等待时间门限之后,接收端将出现一个等待超时的报错;在无法控制发送端程序输出信息时间的情况下,在接收端每次接收前加等待时间,避免发生等待超时。
3.根据权利要求2所述的一种基于Labview和STK的显示系统的设计方法,其特征在于,在步骤三中,将状态机设计为七个状态之间的转换,七个状态以及其中的子VI为:
状态一:写总指令文档
写总指令文档这个状态中,包含两个VI,分别是所述串口读取的VI和将接收到的信息加入字符串以形成STK标准指令并将所述标准指令继续写入总指令文档的VI:
先打开接收消息端的程序,为防止发生步骤二提到的等待超时问题,在接收端串口之前用顺序结构加入等待时间,以尽可能在收发两端保持严格同步;
将读取参数设置成每次需要读取的字符最大值或更大的数值,以保证在每次读取的数据中都至少可以提取出完整的一组有效信息;
提取出完整的有效信息后,需将其转换成STK标准指令格式;
状态二:写子指令文档1、子指令文档2:
在写入子指令文档1、子指令文档2状态中对状态一生成的总指令文档进行过滤;在每个循环开启的第一次发送动画开始运行的指令,以其为开头,以重复的动画开始指令为结尾,截取完整指令,并在结尾加入“End”结束标志写入子指令文档1,以便于STK端读取指令时若逐行读取,方便找到结尾;
在子指令文档1生成的同时,可再对其进行截取,截取方式可根据自身需求进行设置,生成子指令文档2,
用户可根据自己的需求更改对子指令文档1的截取条件,生成不同的子指令文档2;
状态三:写子指令文档3
在状态三中对状态二生成的子指令文档2进行局部修改以生成子指令文档3;在需要将上一次打开的显示的物体关闭、者改变物体颜色或改变物体位置的情况下用状态三来实现;
状态四:读子指令文档1
在STK中做显示准备以读取子指令文档1,实现显示控制;在显示准备过程中建立基本星座,其中包括主要物体的插入和主要物体的设置,主要插入的物体包括卫星、地点、通信链路,主要物体的设置包括整个动画时间段的设置、动画运行模式的设置;在动画运行模式部分选取STK的Realtime模式或者X-Realtime模式以完成实时显示;
状态五:显示等待
显示等待是指在上一个状态开启后显示状态向下运行的时长,显示等待可根据用户需求进行具体设定;
状态六:读子指令文档3
读取子指令文档3用于对物体颜色的更改和物体显示的关闭;
状态七:跳出状态机
本状态用于任意需要跳出状态机的时刻。
4.根据权利要求1、2或3所述的一种基于Labview和STK的显示系统的设计方法,其特征在于,在利用AgConInit()函数对CONNECT模块初始化过程中,对于PC机,缺省配置文件为CONNECT当前目录下的Connect.dat文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810454553.2A CN108664621B (zh) | 2018-05-11 | 2018-05-11 | 基于Labview和STK的显示系统的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810454553.2A CN108664621B (zh) | 2018-05-11 | 2018-05-11 | 基于Labview和STK的显示系统的设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108664621A CN108664621A (zh) | 2018-10-16 |
CN108664621B true CN108664621B (zh) | 2021-09-07 |
Family
ID=63779301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810454553.2A Expired - Fee Related CN108664621B (zh) | 2018-05-11 | 2018-05-11 | 基于Labview和STK的显示系统的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108664621B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150070697A (ko) * | 2013-12-17 | 2015-06-25 | 삼성디스플레이 주식회사 | 유기전계발광 표시장치 |
CN105511295A (zh) * | 2015-11-30 | 2016-04-20 | 中国科学院光电研究院 | 一种基于stkx组件的卫星视景实时仿真系统及其方法 |
WO2016183482A1 (en) * | 2015-05-13 | 2016-11-17 | Rubius Therapeutics, Inc. | Membrane-receiver complex therapeutics |
CN106647335A (zh) * | 2017-01-13 | 2017-05-10 | 王洋 | 一种数字化卫星姿轨控算法地面仿真验证系统 |
WO2017080355A1 (zh) * | 2015-11-10 | 2017-05-18 | 国民技术股份有限公司 | 一种通过手机确认网上交易安全的方法及其系统 |
-
2018
- 2018-05-11 CN CN201810454553.2A patent/CN108664621B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150070697A (ko) * | 2013-12-17 | 2015-06-25 | 삼성디스플레이 주식회사 | 유기전계발광 표시장치 |
WO2016183482A1 (en) * | 2015-05-13 | 2016-11-17 | Rubius Therapeutics, Inc. | Membrane-receiver complex therapeutics |
WO2017080355A1 (zh) * | 2015-11-10 | 2017-05-18 | 国民技术股份有限公司 | 一种通过手机确认网上交易安全的方法及其系统 |
CN105511295A (zh) * | 2015-11-30 | 2016-04-20 | 中国科学院光电研究院 | 一种基于stkx组件的卫星视景实时仿真系统及其方法 |
CN106647335A (zh) * | 2017-01-13 | 2017-05-10 | 王洋 | 一种数字化卫星姿轨控算法地面仿真验证系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108664621A (zh) | 2018-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1004072B1 (en) | Embedded graphical programming system | |
CN101839969B (zh) | 卫星通讯1553b地面检测系统及其检测方法 | |
WO2001067245A2 (en) | Remote operation of real-time graphical applications | |
CN103780674B (zh) | 一种基于硬件模拟的虚拟机通信方法和装置 | |
CN108664621B (zh) | 基于Labview和STK的显示系统的设计方法 | |
US20080005286A1 (en) | Step-wise command line interface for configuring network devices | |
CN110134622A (zh) | 数据采集模块与数据传输模块的数据交互系统 | |
Yan et al. | Intergrating UAV development technology with augmented reality toward landscape tele-simulation | |
CN112162733B (zh) | 基于Qt的相控阵雷达模块化监控软件的设计方法 | |
CN104866306A (zh) | 基于移动端阅读的笔记实现方法、装置、移动端和系统 | |
Tian et al. | Research and Implementation on serial communication based on Qt | |
CN104765856B (zh) | 保留用户选择状态的方法及装置 | |
CN111581817A (zh) | 一种基于opc-ua的仿真软件数据通信方法 | |
CN102946430B (zh) | 指挥调度系统及方法 | |
CN111694637A (zh) | 一种在线全自动多智能体控制仿真编译系统 | |
CN101369013B (zh) | 天气雷达与航管雷达信息融合显示的方法及其系统 | |
KR100271972B1 (ko) | 멀티 세션을 제공하는 터미널 기반의 데이터 통신 시스템 및 그를 이용한 통신 방법 | |
Zhang et al. | Study and design of an agricultural SMS system based on a GSM modem | |
US20240119228A1 (en) | Spreadsheet application with hybrid local and remote operation | |
CN116795356B (zh) | Flutter与原生平台的混合开发方法、系统及装置 | |
CN115047782B (zh) | 联合仿真系统 | |
CN214429556U (zh) | 一种基于国产cpu的屏幕共享设备 | |
CN117130613A (zh) | 一种机载二次雷达显控界面自动生成方法及系统 | |
CN210536666U (zh) | FastLIN总线接口设备 | |
KR100907664B1 (ko) | 원격 문서 편집 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20210907 |