ApolloStudio高手之路(14)(历史记录曲线的灵活应用)

在上一个篇幅中(ApolloStudio高手之路(13):实时曲线的处理与应用),我们在ApolloStudio中通过简单的流程(初始化曲线模型->修改曲线名称(可选项)->添加辅助线(可选项)->添加数据点)实现了实时数据曲线的绘制,同时也指出了图表控件的“72变”特性,在本篇中我们将集中在如何在ApolloStudio中灵活的去处理历史记录曲线。
设置历史记录曲线的目的在于将需要持续跟踪的关键点数据进行图形化显示,当然,前提是需要对关键点数据进行存储(在大多数组态软件中,该过程叫做“归档”),存储的介质通常会采用数据库(大多数组态软件默认采用的是Access或者SQLite这类单文件小型数据库系统,免配置,便于移植),ApolloStudio与传统组态软件在本质上很大的区别,支持更为细致的操作,但是在原理流程上是完全一样的。
我们先来看一下在ApolloStudio的“脚本工具集”中为我们提供了哪些支持:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

值得注意的是,在ApolloStudio里面针对历史记录曲线提供了2种数据模型可供选择: XY散点数据模型与Time-Y时间轴数据模型,2者本质上并没有太大区别,区分开来的目的是为了让图表更好的区分并优化相关操作。
随机散点的生成 在开始使用历史数据图表之前,我们需要事先准备好数据表,不然也成巧妇难为无米之炊了,在本案例中,我们使用了Access来结合讲解,先新建Access数据表,新建3个字段(ID,Data,Time)然后保存数据表名为dt:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

数据表建立完成后,我们需要新增数据,这里我们选择使用ApolloStudio来生成100组随机数(当然也可以在Office 套件里面的Access中进行手动数据添加,如果你不嫌麻烦的话),在ApolloStudio中我们首先配置好任务项:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

在随机散点的生成中,组态界面单元暂时派不上用场,但是在后面历史数据曲线的呈现中是需要用到的,所以我们姑且先将其一次性设置完成,同样的,我们先在组态UI设计器中放置好一个图表控件并保存导出为界面文件:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

在数据配置中,设置好之前在Access中保存的数据库文件路径:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

【ApolloStudio高手之路(14)(历史记录曲线的灵活应用)】 接着上一段简单的脚本,循环往数据库内写入100个随机数值:

#-*- coding: UTF-8 -*- #加载内嵌模块 import clr,sys,time,datetime,random #SQL插入数据语句 sql = "INSERT INTO dt ([Data], [Time]) Values (%s, Now())" #计算循环的次数 mycount = 0#循环函数体 while True: AS.Func_SQL_Access_CMD_Insert(sql%str(random.randint(12,60)))#插入12~60之间的随机数 mycount += 1#自加1操作计数 time.sleep(0.1)#延时 if mycount > 100:#循环100次后退出While循环 break AS.Func_SysInfoAdd("Done")#完成显示信息

配置好脚本文件路径:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

配置完成后,执行启动(此时需提前关闭Access以避免出现文件被占用的报警提示),当出现Done字样时表示数据插入完成。
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

我们再来看下数据库文件里面的数据:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

历史数据的呈现 在上面的篇幅中,我们着重讲解了如何去配置任务项以及通过一段简单的脚本来循环插入随机数据。接下来我们只需更换一个新的脚本,告诉ApolloStudio我们需要呈现哪些数据即可,同样的,我们先上脚本:
#-*- coding: UTF-8 -*- #加载内嵌模块 import clr,sys,time,datetime#生成历史记录曲线模型(绑定的图表控件、图表名显示名称、X轴名称、Y轴名称) AS.Func_UI_PlotView_History_TY_SetDispModel("plotview1", "历史记录曲线", "时间轴", "数据值") #查询数据表语句(可根据需要完全自定义,这里我们是选择显示所有的数据) sql_instance = "SELECT * FROM dt" #执行查询获取返回表数据 mydt = AS.Func_SQL_Access_CMD_Select(sql_instance) #计算返回的数据表内包括多少行数据 mycount = AS.Func_DataTable_GetRowsCount(mydt) #初始两个列表来分别存储X坐标(这里是时间轴)与Y坐标 list_x = [] list_y = [] #根据行数将列表进行填充 for x in xrange(0, mycount): mydata = https://www.it610.com/article/AS.Func_DataTable_GetObj(mydt, x, 1)#获取数据值 mytime = AS.Func_DataTable_GetObj(mydt, x, 2)#获取对应的时间轴 list_x.append(mytime)#时间轴 list_y.append(float(mydata))#数据值 #将列表内的数据生成曲线呈现在图表控件上(数据需转换成元组后再带入) AS.Func_UI_PlotView_History_TY_SetLine("plotview1", "随机数曲线1", tuple(list_x), tuple(list_y))

同样的,在脚本逻辑单元内设置好我们新脚本的路径即可:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片


当我们再次执行启动的时候,数据曲线便立马呈现在我们面前:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

与实时曲线一样,我们可以通过鼠标来进行滚轮放大缩小、鼠标右键平移,鼠标中键双击展示缩略图、按下鼠标中键拖动局部细节方法等操作。
如果是需要对局部时间内的数据进行查询操作并显示,我们可以通过修改上面脚本中SQL的条件判断即可实现,比如下面这样:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片

重新加载运行后,即可得到局部的数据曲线:
ApolloStudio高手之路(14)(历史记录曲线的灵活应用)
文章图片


***********************************************************************************************************************************************
ApolloStudio最新版下载地址(网盘有交流群号):
(点击跳转至首页文章,见文章最底部下载链接)

    推荐阅读