APP下载

一种用户程序的自动布局算法

2021-01-15戴晓华汪宏毅

仪器仪表用户 2021年1期
关键词:用户程序功能块画布

孔 金,戴晓华,汪宏毅,刘 威

(浙江中控技术股份有限公司,杭州 310053)

0 引言

功能块语言源于信号处理领域,它将各种功能块连接起来实现所需要的控制功能,其图形元素由功能、功能块和连接元素组成[1]。功能块图(Function Block Diagram,FBD)编程软件是工业控制系统中最主要的控制策略组态工具之一,提供FBD的编程和调试功能。用户程序画布存在功能块重叠、布局局部紧凑等问题,这导致该软件存在布局耗时久、审核图纸难、调试维护工作量大等易用性问题。为了解决该类问题,在保持FBD程序软件现有功能和不影响现有业务逻辑的基础上,通过自动调整控件尺寸、自动调整控件位置、自动调整控件间距等方法,对布局效果进行优化,既能实现人机交互方便操作,又能有效地减少功能块边的交叉数[2]。

1 自动调整控件尺寸

用户程序中由于采用了固定大小显示功能块,在实际应用时经常出现位号名显示不全、功能块名称显示不全、功能块位号名称显示不全、功能块参数重叠等问题。因此,为了解决显示问题,并保证最佳显示风格,现提供方法支持自动调整控件尺寸。

将控件类型分为数据引用控件和功能块两种,因此计算控件尺寸的方法,根据控件类型进行分类,共有两种方式。

1.1 数据引用控件

用户程序实例化该控件后,先获取其位号名,并计算位号名文本宽度。然后,获取位号名文本宽度和控件文本硬编码宽度的最大值。最后,根据该值调整控件尺寸。

获取位号名文本宽度和控件文本硬编码宽度的最大值方法为比较两个值,若位号名文本宽度不大于控件文本硬编码宽度,则最大值为控件文本硬编码宽度;若位号名文本宽度大于控件文本硬编码宽度,则最大值为位号名文本宽度。

1.2 功能块

用户程序实例化该控件后,依次计算功能块名称文本宽度、功能块位号名文本宽度、功能块同行参数名称最大行文本宽度,并获取三者之间的最大值作为控件文本宽度。然后,获取控件文本宽度与控件文本硬编码宽度的最大值。最后,根据最大值调整控件尺寸。

获取功能块文本宽度方法是先获取功能块名称,然后根据每个字节所占文本宽度进行计算。

获取功能块位号名文本宽度方法是先获取功能块位号名,然后根据每个字节所占文本宽度进行计算。

获取功能块同行参数名称最大行的文本宽度的方法是先依次获取同序号的输入参数和输出参数的名称,再根据每个字节所占文本宽度,依次计算输入参数文本宽度和输出参数文本宽度,并计算两者之和后保存;然后,根据序号遍历保存的值进行比较,获取最大值即可。

获取控件文本宽度和控件文本硬编码宽度的最大值方法为:比较两个值,若控件文本宽度不大于控件文本硬编码宽度,则最大值为控件文本硬编码宽度;若控件文本宽度大于控件文本硬编码宽度,则最大值为位号名文本宽度。

2 自动调整控件位置

用户程序可以通过导入CSV和XML文件新建FBD用户程序,但是数据引用控件和功能块的位置都是软件硬编码的,当超过一定数量后,就会出现功能块重叠问题。因此,为了解决重叠问题,现提供方法支持自动调整控件位置。

2.1 计算控件位置

计算控件位置的方法是进行遍历所有控件,每获取一个控件位置后,再遍历除了自己以及遍历过的控件之外的其他所有控件,若发现重叠,则进行偏移。

2.2 计算重叠

图1 控件位置计算过程Fig.1 Control position calculation process

图2 控件区域定义Fig.2 Control area definition

计算重叠的方法是获取两个控件的最小矩形区域,若两个区域相交,则认为重叠;若两个区域不相交,则认为不重叠。

判断区域相交算法,如下所示:

控件区域定义为rect(min,max),min和max是二维点(x,y)组成,如图2所示。

两个控件a(mina, maxa)和b(minb, maxb)的交集c(minc,maxc)满足:

minc.x = max(mina.x, minb.x)

minc.y = max(mina.y, minb.y)

maxc.x = min(maxa.x, maxb.x)

maxc.y = min(maxa.y, maxb.y)

若满足以下情形,则a和b相交,否则a和b不相交。

minc.x <= maxc.x且minc.y <= maxc.y

3 自动调整控件间距

用户程序支持通过导入XML文件新建FBD用户程序,但是XML文件中坐标的单位是mm,用户程序坐标的单位是像素,且纸张大小与FBD用户程序画布大小不一致,因此转化后,该软件存在布局紧凑等问题。虽然自动调整控件尺寸解决了显示不全问题,自动调整控件位置解决了重叠问题,但是会存在控件紧凑在局部区域,其他区域空白较多,影响用户体验。因此,为了解决该问题,现提供自动调整控件间距方法。该方法在图中的控件较多时,可以尽量减少图中的交叉线,并且在进行深度搜索时充分考虑到相邻控件的布局,使画布的可读性比较好[3]。

3.1 计算控件间距

计算控件间距的方法为先获取所有控件的最小有效区域,然后获取画布显示有效区域,再计算最小有效区域和画布显示有效区域的缩放比,最后根据缩放比获取控件间距。

图3 控件最小区域计算方法Fig.3 The calculation method of the minimum area of the control

图4 调整前用户程序画布显示效果Fig.4 User program canvas display effect before adjustment

3.2 获取所有控件有效区域

获取所有控件有效区域的方法为遍历所有控件位置,先记录第一个获取的控件位置为最小有效区域,然后继续遍历,获取该控件位置后,并与最小有效区域值进行比较,若该控件位置不在最小有效区域内,则根据该控件位置调整最小有效区域范围。

控件区域定义为 rect(min,max),min和 max是二维点(x,y)组成。两个控件分别是a(mina, maxa)和b(minb, maxb),则这两个控件的最小有效区域是(mina,maxb)。

3.3 计算画布显示有效区域

计算画布显示有效区域的方法为:根据用户程序的画布大小获取显示控件位置区域。

3.4 计算最小有效区域和画布显示区域的缩放比

计算最小有效区域和画布显示区域的缩放比方法是先依次获取最小有效区域的宽度和高度以及画布显示区域的宽度和高度,然后依次将最小有效区域的宽度和画布显示区域的宽度相除获取宽度缩放比,将最小有效区域的高度和画布显示区域的高度相除获取高度缩放比。

3.5 计算控件间距

计算控件间距的方法是遍历所有控件,获取控件位置信息后,依次分别乘以宽度缩放比和高度缩放比,获取最终控件位置,该值与相邻控件位置之差就是间距值。

4 方案验证

以用户程序的导入XML文件功能为例,画布使用该方法前后的显示对比效果如下所示:

1)未使用该成果,用户程序画布显示效果如图4所示。

图5 调整后用户程序画布显示效果Fig.5 User program canvas display effect after adjustment

2)使用该成果后,用户程序画布显示效果如图5所示。

5 结束语

针对工业控制系统软件的用户程序布局易用性问题,本文从自动调整控件尺寸、自定义调整控件位置、自定义调整布局等几个方面进行了尝试,取得了良好的效果。使用该方法后,对于工程实施人员而言,无论是对于组态实施,还是组态调试,效率都有明显提升;对于用户而言,不管是在线查看组态,还是审核图纸,体验都有明显改善。

猜你喜欢

用户程序功能块画布
在画布上做梦的画家 夏加尔
变速箱控制系统Bootloader设计与实现
为什么要在画布上割一刀?
让鲜花在画布上盛开
Ovation系统FIRSTOUT和FIFO跳闸首出比较
基于CCS5.5的TMS320C6000程序Flash上电自举设计及三种固化方法对比
自定义功能块类型在电解槽联锁中的应用
大师的画布
基于MACSV6.5.2的锅炉燃尽风开关量调节门控制功能块设计
C8051F410单片机BootLoader的实现