CN102567014A - 一种Lua脚本在SCADA系统中实现动画的方法 - Google Patents
一种Lua脚本在SCADA系统中实现动画的方法 Download PDFInfo
- Publication number
- CN102567014A CN102567014A CN2011103581506A CN201110358150A CN102567014A CN 102567014 A CN102567014 A CN 102567014A CN 2011103581506 A CN2011103581506 A CN 2011103581506A CN 201110358150 A CN201110358150 A CN 201110358150A CN 102567014 A CN102567014 A CN 102567014A
- Authority
- CN
- China
- Prior art keywords
- script
- lua
- scada system
- scada
- engine
- 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.)
- Pending
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种使用Lua脚本实现SCADA系统动画的方法。本发明在SCADA系统和Lua引擎之间构建用于两者之间交互的共享库,共享库包括参数和图像操作函数;在SCADA系统中设置定时器,并通过按定时器设定的时间间隔执行Lua脚本,Lua脚本通过调用共享库的图像操作函数实现对SCADA系统画面的操作,进而使SCADA系统画面按定时器的时间间隔产生连续变化动画效果。本发明充分利用了Lua小巧功能强大和与C++无缝集成的特点,在SCADA系统中产生流畅的动画效果的同时能缩短开发周期,减少开发成本。
Description
技术领域
本发明涉及SCADA图形系统动画实现技术。
背景技术
SCADA系统应用领域很广,可以应用于电力、冶金、石油、化工、建筑等领域的数据采集与监视控制以及过程控制等诸多领域。静态图形监控已不能直观生动地展现工业各种设备、设施的实际运转状态,图形动画已逐渐成为工业SCADA系统不可或缺的功能,是SCADA图形系统发展的必然趋势。界面操作动画实现的动画较为单一,简单,逻辑稍微复杂的动画配置过程复杂。脚本语言良好的快速开发,高效率的执行,解释而非编译执行,和其它语言编写的程序组件之间通信功能很强大的优点,成为SCADA图形系统动画技术的首选。有使用IronPython脚本语言的,有自定义类VB脚本和类C脚本。IronPython庞大,处理速度慢;自定义脚本语言需要从零开发,耗费大量的资源,开发成本和维护成本较高。
发明内容
本发明提供一种SCADA图形系统动画的实现方法,Lua小巧强大保证了脚本的执行效率;Lua的开源特性缩短了开发周期,降低了开发成本;脚本的灵活性,能够实现逻辑复杂的动画。
本发明的核心思想为:在C++编写的SCADA图形系统和Lua引擎之间搭建一个共享库,能够使Lua引擎和C++相互理解对方定义的变量和函数,进而使两者能够进行数据交互;在图形系统开发环境中使用共享库中的变量和动画函数编写符合Lua语法规范的动画脚本,由图形系统开发环境负责对脚本进行解析;图形系统运行环境动态加载脚本,Lua引擎执行脚本。动画的实现则是在SCADA系统中设置定时器,并通过按定时器设定的时间间隔执行Lua脚本,Lua脚本通过调用共享库的图像操作函数实现对SCADA系统画面的操作,进而使SCADA系统画面按定时器的时间间隔产生连续变化动画效果。具体的过程可以分成四个步骤:
步骤10:在SCADA系统和Lua引擎之间构建共享库,所述共享库包括参数、函数,所述函数包括图像操作函数;
步骤11:编写Lua脚本,所述脚本包含步骤10中所述的图像操作函数;
步骤12:SCADA系统运行时加载Lua引擎和Lua脚本,Lua引擎载入步骤10的共享库和Lua脚本;
步骤13:Lua引擎按定时装置设定的时间间隔执行Lua脚本。
所述的时间间隔是30-67ms,最好为55ms。
进一步,所述Lua脚本分画面脚本和图形脚本,每种图形对象对应一个图形脚本,所述步骤13的执行脚本过程首先执行画面脚本然后执行各个图形脚本。
进一步,还包括图形系统开发装置,所述的图形系统开发装置载入Lua引擎、载入所述步骤10的共享库、编写步骤11的Lua脚本,编写后的脚本经图形系统开发装置的解析无错误后保存,解析错误的无法保存。
进一步,所述的画面脚本保存在画面文件的画面参数中,所述的图形脚本保存在画面文件的图形参数中。所述的画面脚本和图形脚本都保存在画面文件同名的脚本文件中。
与现有技术相比,本方法充分利用了Lua小巧强大的特点,有效提高动画执行效率,以及利用其它脚本语言进行二次开发所带来的成本和维护问题。
具体实施方式
具体的实施可以采用Lua的C++扩展版本LuaPlus,LuaPlus也是开源的脚本语言。所述的SCADA系统是通过C++编写的,由于LuaPlus可以与C++语言无缝集成,LuaPlus可以很好的集成到C++编写的SCADA系统中。定时器设置的时间间隔只要能保证所产生画面的变化在肉眼看起来连续流畅就可以,可以设定30ms至67ms的时间间隔,最好为55ms,也就是每秒30帧到每秒15帧。本实施例采用55ms的时间间隔,也就是大约每秒18帧的动画。
首先,需要SCADA系统和Lua脚本语言之间创建共享库。共享库包括常量,变量等参数以及函数。变量包括系统变量和用户自定义变量,系统变量如系统时间、登陆用户等;另外用户可以根据现场需求自定义变量。函数主要是是图像处理函数,图像处理函数在SCADA系统中分成画面处理函数和图形处理函数,画面处理函数的操作对象是画面,如设置画面图层显隐、画面背景变化等函数;图形处理函数的操作对象是图形,如图形旋转、移动、缩放等函数。
这个共享库需要在Lua引擎和C++编写的SCADA系统都能共同访问。在SCADA系统中,存在两种操作图像的操作对象,一种是SCADA系统的整体画面或者背景画面,一种SCADA系统上表示的图形或图元对象。这决定了对画面和图形的操作需要单独使用自己的脚本。在SCADA系统的画面和图形对象上编写各自独立脚本,需要在SCADA图形系统开发环境或装置中设定。同时为了能使编写的Lua脚本正确无误,符合Lua语法规范,正确引用共享库的参数和函数,编写Lua脚本可以在图形系统开发环境中实现。在设置画面和图形对象的各自脚本或者在保存时还要对这些脚本进行解析预编译。为了正常的解析和预编译,共享库的参数和函数同样需要载入到SCADA图形系统的开发环境中。
具体的创建共享库需要包括以下步骤:
1、在SCADA图形系统中定义公开到Lua引擎中的变量和动画函数;
2、接着在SCADA图形系统中创建Lua引擎;
3、然后将定义的变量和动画函数注册到Lua引擎中,供编写脚本以及执行脚本时Lua引擎识别并调用。
下面是一段示例代码,用来表示这个过程:
int grnHour ;
……
bool Rotate(int nobjID,int ndx,int ndy,float fArg)
{
pObj = GetObjPtrFromID(nobjID);
if (pObj == NULL) return false;
pObj->SetRotateOrg(ndx,ndy);
pObj->SetRotateAngle(fArg);
return true;
}
……
lua_State *g_Lua = luaL_newstate();
LuaState* castedState = LuaState::CastState(g_Lua);
LuaStateOwner g_luaplus(castedState);
g_luaplus->GetGlobals().SetInteger("grnHour",grnHour);
……
g_luaplus->GetGlobals().RegisterDirect("Rotate ", Rotate);
……
上述代码中,grnHour和Rotate分别是公开到Lua引擎中的变量和函数,grnHour是当前系统小时数,Rotate函数实现了编号为nobjID的图形对象pObj围绕点(ndx,ndy)旋转fArg的动画。lua_State *g_Lua = luaL_newstate()创建的是Lua引擎指针,LuaStateOwner g_luaplus(castedState)创建LuaPlus指针。SetInteger和RegisterDirect分别将变量grnHour和Rotate注册到Lua引擎中。经过这样注册后,Lua引擎就能识别变量grnHour和Rotate函数,图形开发环境的Lua脚本解析器能够判断变量grnHour和Rotate函数。Lua引擎执行脚本中的Rotate函数时就会执行共享库中的Rotate函数,对grnHour变量操作时就会对共享库中的grnHour操作。
下述示例代码给出设置定时器以及按照定时器设定的时间间隔运行脚本的过程:
SetTimer(ACTION_TIMER,55,NULL);
……
Short DoGraphScriptAction()
{
if (TimeCount%(m_nScriptRunMilsec/55)==0)
{
if (g_luaplus->DoString(m_chScript)!=0)
return -1;
if (g_luaplus->DoFile (“画面1.tsscript”)!=0)
return -1;
}
While(pObj)
{
if (TimeCount%(pObj->m_nScriptRunMilsec/55)==0)
{
if (g_luaplus->DoString(pObj->m_chScript)!=0)
return -1;
}
}
return 1;
}
SetTimer(ACTION_TIMER,55,NULL)定义一个55ms定时器,时间到达时TimeCount+1。TimeCount%(m_nScriptRunMilsec/55)用于判断画面脚本执行时间是否到达,如果到达执行画面脚本;接着遍历所有图形对象,判断每个图形对象是否到达运行时间,TimeCount%(pObj->m_nScriptRunMilsec/55) 用于判断图形脚本执行是否到达,如果到达执行该图形对象的脚本,m_nScriptRunMilsec为脚本执行周期,取值范围>=55。
下述的脚本1和脚本2分别是一段画面脚本和一段图形对象脚本的例子。脚本1是画面脚本示例,实现了当系统时间为偶数整点小时, 图层1图形全部显示,画面背景颜色调整为蓝色;否则显示图层2图形全部显示,画面背景颜色调整为黑色。脚本2展示了一份图形动画脚本实例,实现了当系统时间为偶数小时时,编号为1的图形围绕点(10,10)旋转30度。
脚本1:
if(math.mod(grnHour,2)==0&&grnMin==0&&grnSec==0)
then
SetLayerVisible (1,1);
SetPaperColor(0,0,255);
else
SetLayerVisible (2,1);
SetPaperColor(0,0,0);
End
脚本2:
if(math.mod(grnHour,2)==0)
then Rotate(1,10,10,30);
end
Claims (7)
1.一种Lua脚本在SCADA系统中实现动画的方法,其特征在于:所述的SCADA系统包含设置了一定时间间隔的定时装置,所述方法包括以下步骤:
步骤10:在SCADA系统和Lua引擎之间构建共享库,所述共享库包括参数、函数,所述函数包括图像操作函数;
步骤11:编写Lua脚本,所述脚本包含步骤10中所述的图像操作函数;
步骤12:SCADA系统运行时加载Lua引擎和Lua脚本,Lua引擎载入步骤10的共享库和Lua脚本;
步骤13:Lua引擎按定时装置设定的时间间隔执行Lua脚本。
2.根据权利要求1所述的Lua脚本在SCADA系统中实现动画的方法,其特征在于:所述的时间间隔是30-67ms。
3.根据权利要求1所述的Lua脚本在SCADA系统中实现动画的方法,其特征在于:所述的时间间隔是55ms。
4.根据权利要求1至3中任一项所述的的Lua脚本在SCADA系统中实现动画的方法,其特征在于:所述Lua脚本分画面脚本和图形脚本,每种图形对象对应一个图形脚本,所述步骤13的执行脚本过程首先执行画面脚本然后执行各个图形脚本。
5.根据权利要求4所述的Lua脚本在SCADA系统中实现动画的方法,其特征在于:还包括图形系统开发装置,所述的图形系统开发装置载入Lua引擎、载入所述步骤10的共享库、编写步骤11的Lua脚本,编写后的脚本经图形系统开发装置的解析无错误后保存,解析错误的无法保存。
6.根据权利要求5所述的Lua脚本在SCADA系统中实现动画的方法,其特征在于:所述的画面脚本保存在画面文件的画面参数中,所述的图形脚本保存在画面文件的图形参数中。
7.根据权利要求5所述的Lua脚本在SCADA系统中实现动画的方法,其特征在于:所述的画面脚本和图形脚本都保存在画面文件同名的脚本文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103581506A CN102567014A (zh) | 2011-11-14 | 2011-11-14 | 一种Lua脚本在SCADA系统中实现动画的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103581506A CN102567014A (zh) | 2011-11-14 | 2011-11-14 | 一种Lua脚本在SCADA系统中实现动画的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102567014A true CN102567014A (zh) | 2012-07-11 |
Family
ID=46412526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103581506A Pending CN102567014A (zh) | 2011-11-14 | 2011-11-14 | 一种Lua脚本在SCADA系统中实现动画的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102567014A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317578A (zh) * | 2014-10-13 | 2015-01-28 | 无锡梵天信息技术股份有限公司 | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 |
CN104679489A (zh) * | 2013-12-02 | 2015-06-03 | 厦门极致互动网络技术有限公司 | 一种在网络游戏客户端中内置网络浏览器的系统及方法 |
CN106033367A (zh) * | 2015-03-18 | 2016-10-19 | 广州四三九九信息科技有限公司 | 一种脚本游戏服务器引擎 |
CN106844600A (zh) * | 2017-01-16 | 2017-06-13 | 百融(北京)金融信息服务股份有限公司 | 一种网站图片处理系统及方法 |
CN107678944A (zh) * | 2017-09-04 | 2018-02-09 | 中国航空工业集团公司西安飞行自动控制研究所 | 基于嵌入式脚本的自动测试方法 |
CN107908393A (zh) * | 2017-11-17 | 2018-04-13 | 南京国电南自轨道交通工程有限公司 | 一种scada实时模型画面的设计方法 |
CN108933969A (zh) * | 2018-07-25 | 2018-12-04 | 深圳市茁壮网络股份有限公司 | 一种实现数字电视视频动画的方法及系统 |
CN116110072A (zh) * | 2023-04-12 | 2023-05-12 | 江西少科智能建造科技有限公司 | 一种cad图纸解析方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080094401A1 (en) * | 2006-10-24 | 2008-04-24 | Ecava Sdn. Bhd. | Method of animating vector graphics |
CN101510151A (zh) * | 2009-03-23 | 2009-08-19 | 国电南瑞科技股份有限公司 | 综合监控跨平台组态人机界面系统 |
CN101840415A (zh) * | 2010-03-15 | 2010-09-22 | 福建鑫诺通讯技术有限公司 | 一种在b/s架构下通过lua脚本控制本地资源的方法 |
-
2011
- 2011-11-14 CN CN2011103581506A patent/CN102567014A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080094401A1 (en) * | 2006-10-24 | 2008-04-24 | Ecava Sdn. Bhd. | Method of animating vector graphics |
CN101510151A (zh) * | 2009-03-23 | 2009-08-19 | 国电南瑞科技股份有限公司 | 综合监控跨平台组态人机界面系统 |
CN101840415A (zh) * | 2010-03-15 | 2010-09-22 | 福建鑫诺通讯技术有限公司 | 一种在b/s架构下通过lua脚本控制本地资源的方法 |
Non-Patent Citations (1)
Title |
---|
李化民等: "SCADA系统初探", 《工业计量》, no. 1, 31 December 2004 (2004-12-31) * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679489A (zh) * | 2013-12-02 | 2015-06-03 | 厦门极致互动网络技术有限公司 | 一种在网络游戏客户端中内置网络浏览器的系统及方法 |
CN104317578B (zh) * | 2014-10-13 | 2017-12-05 | 无锡梵天信息技术股份有限公司 | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 |
CN104317578A (zh) * | 2014-10-13 | 2015-01-28 | 无锡梵天信息技术股份有限公司 | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 |
CN106033367A (zh) * | 2015-03-18 | 2016-10-19 | 广州四三九九信息科技有限公司 | 一种脚本游戏服务器引擎 |
CN106844600A (zh) * | 2017-01-16 | 2017-06-13 | 百融(北京)金融信息服务股份有限公司 | 一种网站图片处理系统及方法 |
CN107678944B (zh) * | 2017-09-04 | 2020-12-29 | 中国航空工业集团公司西安飞行自动控制研究所 | 基于嵌入式脚本的自动测试方法 |
CN107678944A (zh) * | 2017-09-04 | 2018-02-09 | 中国航空工业集团公司西安飞行自动控制研究所 | 基于嵌入式脚本的自动测试方法 |
CN107908393A (zh) * | 2017-11-17 | 2018-04-13 | 南京国电南自轨道交通工程有限公司 | 一种scada实时模型画面的设计方法 |
CN107908393B (zh) * | 2017-11-17 | 2021-03-26 | 南京国电南自轨道交通工程有限公司 | 一种scada实时模型画面的设计方法 |
CN108933969A (zh) * | 2018-07-25 | 2018-12-04 | 深圳市茁壮网络股份有限公司 | 一种实现数字电视视频动画的方法及系统 |
CN108933969B (zh) * | 2018-07-25 | 2021-02-09 | 深圳市茁壮网络股份有限公司 | 一种实现数字电视视频动画的方法及系统 |
CN116110072A (zh) * | 2023-04-12 | 2023-05-12 | 江西少科智能建造科技有限公司 | 一种cad图纸解析方法及系统 |
CN116110072B (zh) * | 2023-04-12 | 2023-08-15 | 江西少科智能建造科技有限公司 | 一种cad图纸解析方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102567014A (zh) | 一种Lua脚本在SCADA系统中实现动画的方法 | |
US7991602B2 (en) | Agent simulation development environment | |
Charkaoui et al. | Cross-platform mobile development approaches | |
CN102591961B (zh) | 一种制作数据图表的方法及系统 | |
CN110750255B (zh) | 一种小程序渲染方法和装置 | |
CN103617066A (zh) | 一种工作流引擎及其实现方法 | |
CN105159999A (zh) | 动态页面的展现方法及装置 | |
CN104680421B (zh) | 一种可伸缩矢量图形svg显示方法及装置 | |
CN104331315B (zh) | 一种任意层次json对象的解析与生成方法及系统 | |
CN107038060B (zh) | 一种页面着色器代码调试方法、装置 | |
CN113918195A (zh) | 应用界面更新方法、装置、电子设备及可读存储介质 | |
US9201633B2 (en) | Creation and deployment of RESTful web services in a graphical programming language | |
CN110264361A (zh) | 一种区块链的数据解析方法及装置 | |
Jamro et al. | IEC 61131-3 programmable human machine interfaces for control devices | |
CN104573110B (zh) | 一种浏览器中图形的动态展示方法及装置 | |
Taivalsaari et al. | The web as a software platform: Ten years later | |
CN102750177B (zh) | 一种使用编译器的脚本实现方法 | |
CN105302558A (zh) | 一种用于多客户端的内容展现系统及方法 | |
CN103425469A (zh) | 基于mda技术的手机游戏代码生成方法 | |
CN114047921A (zh) | 一种推理引擎开发平台、方法、电子设备及存储介质 | |
CN105930166A (zh) | 一种基于web界面弹出层的方法 | |
KR101488815B1 (ko) | 메뉴 테스트용 스크립트 생성 장치, 이를 포함하는 메뉴 테스트 자동화 시스템, 및 그 방법 | |
CN104298495A (zh) | 一种基于脚本语言的程序开发方法及系统 | |
US9519985B2 (en) | Generating mobile-friendly animations | |
CN104951314A (zh) | 对话框的显示方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120711 |