基于组态王的模拟时钟设计
2021-10-25张洪宝华晓峰田晓龙
张洪宝,华晓峰,田晓龙
(德州职业技术学院,山东德州253000)
0 引言
通常,模拟时钟设计通常利用单片机(或嵌入式)系统完成,本文利用组态王软件进行模拟时钟设计。组态王Kingview软件是一种通用的开放型工业监控软件,其融过程控制设计、现场操作以及工厂资源管理于一体[1],与常见的PLC、变频器、智能仪表、智能模块等通讯方便,很容易实现自动监控,在现代生产和教学中得到了广泛应用。利用组态王软件进行模拟时钟的设计,目的是为了让学生练习画面制作、旋转设置和命令语言的编写,同时解决其他文献中不足的问题。有的教材也讲述了利用组态王进行模拟时钟的设计,但效果都不尽人意,有的讲述不细致,学生自己根据教材根本做不出结果;有的虽然能做出结果,但时针的旋转和现实中时钟的时针不相符;有的画出的刻度线位置不准确,方向不指向圆心,时针不能随时间匀速旋转。于玲等[2-3]和石敬波等[4]讲述了模拟时钟的设计过程,但对画面中时钟指针和刻度线的设计都没有详细地讲述;于玲等[2-3]的画面命令语言比较繁琐,时针虽然能匀速旋转,但与分针的旋转不能同步,石敬波等[4]设计的时钟关联的是系统时间;设计的时钟在运行画面中数字显示的时间都不能手动更改;刘玉秀等[5]中模拟时钟显示画面,刻度线不均匀且有的刻度线不能指向中心;王雪、侯秋华等[6-7]是利用系统中三角函数模块完美的画出了表盘画面,而组态王软件不具备这一功能。通过反复研究,本文详述了利用组态王软件进行模拟时钟的设计过程。
1 画面设计
组态软件的应用,绘制画面是重要的一个方面,模拟时钟的画面设计是很重要的一个环节,表盘上12个整点的刻度线一定要均匀分布,并且画出的刻度线要指向圆心。
模拟时钟画面设计主要包括时钟表盘设计和时钟指针设计。
1.1 时钟表盘设计
模拟钟表的表盘设计,主要是刻度线的位置和方向的确定。在画面中画出正圆后,根据圆的坐标和直径(长度或高度)计算出圆心坐标,然后在圆周上放置12个刻度线。
1.1.1 设置3、6、9、12点钟刻度线
特殊位置的4个刻度线,可以直接计算出坐标确定其位置。先画出两条水平刻度线,设置好其纵坐标(纵坐标=圆心纵坐标-刻度线宽度/2),然后利用键盘上的左右移动键,将刻度线分别放置于3点钟和9点钟位置。用同样的方法设置6点钟和12点钟刻度线,画出两条竖直刻度线,设置好其横坐标(横坐标=圆心横坐标-刻度线宽度/2),然后利用键盘上的上下移动键,将刻度线分别放置于6点钟和12点钟位置。
1.1.2 设置其余刻度线
在组态王的画面设计中,其余刻度线的位置不能用编程的方法来确定,刻度线也不能旋转任意角度,只能用特殊的方法解决。画刻度线时要充分利用有关刻度线的对称性。
(1)先确定1点钟和5点钟刻度线在圆周上的位置。这两个刻度线的位置与圆心的连线和过圆心竖直方向的直径成30°角,根据圆心坐标和半径的大小,确定这两个刻度线的横坐标(横坐标=圆心横坐标+半径/2),在该坐标位置画一条竖线,这条竖线与圆周的交点便是1点钟和5点钟的刻度线在圆周上的位置。利用同样的方法,确定7点钟和11点钟刻度线在圆周上的位置。
(2)再确定2点钟和10点钟刻度线在圆周上的位置。这两个刻度线的位置与圆心的连线和过圆心水平方向的直径成30°角,根据圆心坐标和半径的大小,确定这两个刻度线的纵坐标(纵坐标=圆心纵坐标-半径/2),在该坐标位置画一条横线,这条横线与圆周的交点便是2点钟和10点钟的刻度线在圆周上的位置。利用同样的方法,确定4点钟和8点钟刻度线在圆周上的位置。如图1所示。
图1 刻度线位置
(3)确定出刻度线的位置以后,再画出刻度线。先画1点钟和7点钟刻度线。经过这两个刻度线的位置画一条细线,沿着细线的方向画出这两条刻度线,使刻度线的长度和原先画好的刻度线一样。利用1和7的连线与4和10的连线是垂直的,复制1点钟和7点钟这两条刻度线,旋转90°,分别放置在4点钟和10点钟位置。再画5点钟和11点钟刻度线。经过这两个刻度线的位置画一条细线,沿着细线的方向画出这两条刻度线。利用5和11的连线与2和8的连线是垂直的,复制5点钟和11点钟这两条刻度线,旋转90°,分别放置在2点钟和8点钟位置,如图2所示。将多余的辅助线删除,表盘如图3所示。这样画出的刻度线位置准确,方向指向圆心。
图2 刻度线
图3 表盘
1.2 时钟指针设计
时钟指针的设计是指用长度、宽度和颜色不同的3条线段表示时钟的3个指针。时针最短最宽,秒针最长最窄;3个指针的图素位置,时针在最前面,秒针在最后面,3个指针均指向12点钟。根据表盘圆心的坐标和3个指针的长度和宽度,计算出3个指针的坐标,指针的横坐标等于圆心横坐标减去指针宽度的一半,指针的纵坐标等于圆心纵坐标减去指针长度。在工具箱下部修改好3个指针的坐标,将3个指针对齐到表盘的中心。为了美观,再画一个小圆,放置到表盘的中心处。如图4所示。
图4 模拟时钟
1.3 开关设计
在画面中绘制启停开关和复位开关,用来在运行时控制模拟时钟的启动、停止和复位;添加时间输入输出文本,用来在运行时调整时间。运行时,点击启停开关,模拟钟表开始运转,再次点击时停止运转;点击复位开关,时间全部复位清零。在画面上输入“时”“分”“秒”3个文本,中间用冒号隔开,文本“时:分:秒”用来显示运行的时间,同时,可以输入数字,随意更改时间;更改时间时,指针会随着做相应的转动。完整的模拟时钟画面如图5所示。
图5 模拟时钟画面
2 定义变量
在模拟钟表的设计中,需要定义4个内存整型变量和2个内存离散变量。定义3个内存整型变量“时针”“分针”“秒针”,分别对应输出时间的时、分、秒。时针旋转一周是12 h,如果直接把画面中的时针动画连接到变量“时针”,运行时画面中的时针,只能指示整点位置,每小时跳动一个刻度,与实际情况不符。为了运行时时针能够匀速旋转,再定义一个内存整型“时针旋转”中间变量。
定义两个内存离散变量“启停开关”和“复位开关”。
3 动画连接设计
将画面中的秒针和分针分别动画连接变量“秒针”和“分针”,最大顺时针方向对应角度为360°时的数值为60。
将画面中的时针动画连接变量“时针旋转”,最大顺时针方向对应角度为360°时的数值为43 200,此数值为12×60×60,时针每分钟旋转0.5°。
设置旋转连接时,旋转圆心偏离图素中心的大小,水平方向为0,垂直方向为指针高度的一半。
将文本“时∶分∶秒”进行动画连接,模拟值输入和输出分别连接到变量“时针”、“分针”、“秒针”;模拟值输入连接时,秒针和分针的最大值为60,时针的最大值时12。这样在运行时,通过在此输入数值,可以改变时间。
4 画面命令语言设计
在模拟钟表的设计过程中,画面命令语言的设计是最重要的一个环节,画面命令语言编写完成后,要根据运行情况不断进行调试修改,最终达到理想的结果。
根据画面和动画连接设计情况,按照秒和分60进位的规律编写命令语言。
if(\本站点启停开关==1)
{\本站点时针旋转=3600*\本站点时针+60*\本站点分针;
\本站点秒针=\本站点秒针+1;}
if(\本站点秒针==60)
{\本站点分针=\本站点分针+1;
\本站点秒针=0;}
if(\本站点分针==60)
{\本站点时针=\本站点时针+1;
\本站点分针=0;}
if(\本站点时针==12)
\本站点时针=0;
if(\本站点时针旋转==43200)
\本站点时针旋转=0;
if(\本站点复位开关==1)
{\本站点秒针=0;
\本站点分针=0;
\本站点时针=0;
\本站点时针旋转=0;}
软件进入运行系统后,点击启停开关,秒针开始转动,秒针转动60次(一周)后,分针和时针转动一次。运行时,数字显示的时间时、分、秒,可以手动更改,指针和数字显示能够同步变化,在任意时刻点击启停开关,指针停止旋转。两个不同时刻的情况如图6所示。
图6 模拟钟表运行时刻
5 结束语
本文所述利用组态王软件设计的模拟时钟,解决了表盘上刻度线位置不准确、方向不能指向圆心的问题,解决了运行时时针不能匀速旋转的问题。经过运行测试,秒针和分针每周转动60次,每次旋转6°;时针每周转动720次,每次旋转0.5°。将画面命令语言对话框中的程序循环时间改为600 ms,模拟时钟运行的快慢正好能和实际的时钟相吻合。在此设计的基础上,还可以进行改进,添加秒针和分针旋转的中间变量,改变指针动画连接设计和画面命令语言,使秒针和分针每次旋转的角度更小,转动更平缓。