CN102141917A - 基于IronPython脚本语言的多业务联动实现方法 - Google Patents
基于IronPython脚本语言的多业务联动实现方法 Download PDFInfo
- Publication number
- CN102141917A CN102141917A CN2011100844887A CN201110084488A CN102141917A CN 102141917 A CN102141917 A CN 102141917A CN 2011100844887 A CN2011100844887 A CN 2011100844887A CN 201110084488 A CN201110084488 A CN 201110084488A CN 102141917 A CN102141917 A CN 102141917A
- Authority
- CN
- China
- Prior art keywords
- script
- ironpython
- running environment
- interlock
- variable
- 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
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于IronPython脚本语言的多业务联动实现方法,本发明充分利用了开源语言IronPython与.Net框架集成的特点。通过IronPython脚本引擎实现脚本动态加载和运行,完成脚本和宿主语言环境的数据交互。本发明通过IronPython脚本语言编写多***的联动逻辑脚本,调用通用子***函数库实现对象的操作。可根据现场需求灵活修改联动规则并立即生效,不需要修改软件核心程序,消除信息孤岛,以适应多变的联动业务场景。
Description
技术领域
本发明涉及智能建筑控制领域的流程控制技术。尤其涉及一种多业务***的联动控制技术。
背景技术
智能建筑中通常存在多种***,比如视频***,配电自动化***,BA***,智能照明***,火灾报警***,安防***等,通常这些***都独立存在,当某一事件发生时,对应的监控***可以做出反应但是却无法和相关***产生联动。如何突破这种各个子***分割运行的瓶颈,使智能建筑内的硬件平台、软件平台与应用***之间,以及***、信息、组织与管理之间实现高度融合和协调运行,已经成为智能建筑行业乃至社会各界普遍关注的焦点。为了解决这一问题,各个厂家都花费了很多精力,不仅需解决多个复杂***以及多种控制协议之间的互联性和互操作性问题,而且要解决用户的二次开发问题。通常对于多***联动的处理都是通过在原代码添加规则代码的方式完成,这样不但复杂而且容易造成软件的不稳定,而且很多现场的联动规则会发生变化,通常厂家只能通过修改源代码完成客户的需求,耗时耗力。
发明内容
有鉴于此,本发明提供一种多业务***联动实现的方法,有效解决多***联动问题,以及多***联动规则发生变化后,用户的二次开发问题。
本发明的核心思想为:通过PythonEngine脚本引擎实现脚本动态加载和运行,完成脚本和运行环境的交互,能灵活适合多变的业务场景达到流程控制的目的。
本发明采用以下解决方案解决上述问题:
一种基于IronPython脚本语言的多业务联动实现方法,先在C#编写的运行环境与IronPython之间搭建一个连接层,能够理解来自C#与IronPython的变量与函数,使他们能够互相通讯;再使用IronPyhon语言定义多***的联动逻辑控制脚本,通过IronPython脚本引擎实现脚本动态加载和运行,由联动逻辑控制脚本实现逻辑控制,实现多***联动。
所述连接层的创建步骤包括:
先创建脚本运行环境ScriptRuntime;该ScriptRuntime是指脚本的运行时间定义;
再构建一个执行上下文,用来保存需要C#编写的运行环境与IronPython共享的变量;这些变量对联动控制有意义,并且在C#编写的运行环境和IronPython之间共享;
然后创建PythonEngine引擎,用来解析和执行动态语言代码;
最后将以上封装成类,作为IronPython和C#编写的运行环境数据共享的连接层使用。
所述联动逻辑控制脚本的实现步骤包括:
步骤10:创建PY脚本文件;
步骤20:在PY脚本文件中,根据事件发生时,子***如何动作以及动作的先后顺序,使用IronPython语言编写控制脚本,用来控制子***相应的动作;
步骤30:将保存好的脚本文件拷贝到指定的目录下,等待脚本引擎加载;
步骤40:IronPython脚本引擎加载并运行指定目录下的脚本文件;
步骤50:加载完成,脚本在C#主程序的运行环境(即宿主程序运行环境)中运行。
所述步骤20还包括:IronPython脚本引擎将运行环境中的控制变量加入变量字典类,变量字典类中的控制变量可以在C#主程序的运行环境(即宿主程序运行环境和IronPython脚本之间共享。
所述步骤40包括:
步骤100:创建IronPython脚本引擎;
步骤200:遍历制定目录下的脚本文件;
步骤300:加载脚本文件并运行。
所述步骤50还包括:C#主程序的运行环境(即宿主程序运行环境)根据变量字典中的控制变量当前的状态或值进行逻辑条件判断,若条件成立,根据在脚本中定义的事件发生时,子***如何动作以及动作的先后顺序,通过运行环境提供的子***动作接口函数完成操作。
与现有技术相比,本方法有效解决多***联动问题,以及多***联动规则发生变化后,用户的二次开发问题。
附图说明
图1是本发明中的告警***,视频***与SCADA***联动流程图
具体实施方式
下面参考附图结合实例对本发明做进一步的描述:
IronPyhon脚本很容易被C#代码调用,同时又很容易调用C#函数,但是IronPython脚本不能编译成二进制文件,导致C#与IronPython之间不能直接进行通讯,所以在C#编写的运行环境与IronPython之间搭建一个连接层,能够理解来自C#与IronPython的变量与函数,使他们能够互相通讯。
IronPython使用PythonEngine引擎实现连接层,使得IronPython脚本可以和C#编写的运行环境进行交互,IronPython运行在PythonEngine引擎上,所以引擎能访问它的运行环境,IronPython可以操作运行环境中的堆栈结构。
创建连接层的第一步是创建脚本运行环境(ScriptRuntime),这是整个执行过程的起点,接着构建一个执行上下文,用来保存需要共享的变量。运行环境和脚本可以通过创建不同的ScriptScope来提供多个数据隔离的执行上下文,最后创建PythonEngine引擎,用来解析和执行动态语言代码。将以上功能封装成类,作为IronPython和运行环境数据共享的连接层使用。
联动控制脚本的编写主要用来实现多***的联动逻辑控制多***联动控制逻辑,通过运行环境和脚本之间共享的变量,根据事件发生时,子***如何动作以及动作的先后顺序,使用IronPython语言编写控制脚本,保存为PY脚本文件,由IronPython脚本引擎加载并运行。加载完成,脚本在运行环境中运行,运行环境根据变量字典中的控制变量当前的状态或值进行逻辑条件判断,若条件成立,根据在脚本中定义的事件发生时,子***如何动作以及动作的先后顺序,通过运行环境提供的子***动作接口函数完成操作。当现场逻辑控制要求发生变化时,只要修改PY脚本文件就可以完成逻辑控制的修改,完成二次开发,不需要修改软件核心代码。
IronPython是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度,IronPython和.Net框架集无缝集成。它可以用来开发各种程序,从简单的脚本任务到复杂的、面向对象的应用程序都有大显身手的地方。
使用IronPython脚本语言建立多业务***联动机制的方法,在脚本文件中编写多***联动控制逻辑,通过PythonEngine脚本引擎实现脚本动态加载和运行,完成脚本和运行环境的交互。以下展示了一份控制脚本文件实例:
以上为本发明中的多***联动脚本描述。
在上述描述的脚本控制文件中,IronPython通过Import命令导入了Windows***界面库和子***操作库(NTSIronPython_Dll.dll)定义了一个变量事件号(EventID)和常量EVENT_ID_DEF,EventID变量是脚本文件和运行环境的共享全局变量,EVENT_ID_DEF为常量,运行环境和脚本都将其定义为0x01,NTSDll为子***操作库中具体的类。PythonEngine scriptEngine=new PythonEngine()语句用来创建运行环境,通过ScriptScope构建执行上下文,其中保存了环境及全局变量。scriptEngine.DefaultModule.Globals[″EventId″]=m_EventId采用ScriptScope在脚本和运行环境之间传递数据。脚本被加载后在运行环境中运行,当***事件一发生时只需将事件号(EventID)置为EVENT_ID_DEF即0x01时,脚本便顺序执行子***操作库中NTSDLL类的操作函数,视频子***中的录像服务函数和短信服务子***中的短信发送服务函数以及门禁***中的操作函数。如果需要重新定义事件一发生时的联动逻辑,只需要修改脚本文件即可,不需要修改任何***源程序。
具体例子
如附图1所示,一种使用IronPython脚本语言建立多业务***联动机制的方法,在智能建筑能源管理***中进行了实施,能源管理***中有视频***,短信***,门禁***等,应用本发明按客户需求对以上部分子***进行联动控制。具体步骤为:
步骤10:创建PY脚本文件
步骤20,在PY脚本文件中,根据事件发生时,子***如何动作以及动作的先后顺序,使用IronPython语言编写控制脚本
步骤30,将保存好的脚本文件拷贝到指定的目录下,等待脚本引擎加载
步骤40,IronPython脚本引擎加载并运行指定目录下的脚本文件
步骤50,加载完成,脚本在运行环境中运行
本***联动控制部分采用了本发明进行处理,开发人员只需要关注业务逻辑,避免了原来逻辑一变,***程序就需要修改,编译的二次开发问题,增加了***的灵活性和可扩展性。
Claims (6)
1.一种基于IronPython脚本语言的多业务联动实现方法,其特征是先在C#编写的运行环境与IronPython之间搭建一个连接层,能够理解来自C#与IronPython的变量与函数,使他们能够互相通讯;再使用IronPyhon语言定义多***的联动逻辑控制脚本,通过IronPython脚本引擎实现脚本动态加载和运行,由联动逻辑控制脚本实现逻辑控制,实现多***联动。
2.根据权利要求1所述的基于IronPython脚本语言的多业务联动实现方法,其特征是所述连接层的创建步骤包括:
先创建脚本运行环境ScriptRuntime;该ScriptRuntime是指脚本的运行时间定义;
再构建一个执行上下文,用来保存需要C#编写的运行环境与IronPython共享的变量;
然后创建PythonEngine引擎,用来解析和执行动态语言代码;
最后将以上封装成类,作为IronPython和C#编写的运行环境数据共享的连接层使用。
3.根据权利要求1所述的基于IronPython脚本语言的多业务联动实现方法,其特征是所述联动逻辑控制脚本的实现步骤包括:
步骤10:创建PY脚本文件;
步骤20:在PY脚本文件中,根据事件发生时,子***如何动作以及动作的先后顺序,使用IronPython语言编写控制脚本,用来控制子***相应的动作;
步骤30:将保存好的脚本文件拷贝到指定的目录下,等待脚本引擎加载;
步骤40:IronPython脚本引擎加载并运行指定目录下的脚本文件;
步骤50:加载完成,脚本在C#主程序的运行环境即宿主程序运行环境中运行。
4.根据权利要求2所述的基于IronPython脚本语言的多业务联动实现方法,其特征是所述步骤20还包括:IronPython脚本引擎将运行环境中的控制变量加入变量字典类,变量字典类中的控制变量可以在C#主程序的运行环境即宿主程序运行环境和IronPython脚本之间共享。
5.根据权利要求2所述的基于IronPython脚本语言的多业务联动实现方法,其特征是所述步骤40包括:
步骤100:创建IronPython脚本引擎;
步骤200:遍历制定目录下的脚本文件;
步骤300:加载脚本文件并运行。
6.根据权利要求4所述的基于IronPython脚本语言的多业务联动实现方法,其特征是所述步骤50还包括:C#主程序的运行环境即宿主程序运行环境根据变量字典中的控制变量当前的状态或值进行逻辑条件判断,若条件成立,根据在脚本中定义的事件发生时,子***如何动作以及动作的先后顺序,通过运行环境提供的子***动作接口函数完成操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100844887A CN102141917A (zh) | 2011-04-02 | 2011-04-02 | 基于IronPython脚本语言的多业务联动实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100844887A CN102141917A (zh) | 2011-04-02 | 2011-04-02 | 基于IronPython脚本语言的多业务联动实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102141917A true CN102141917A (zh) | 2011-08-03 |
Family
ID=44409459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011100844887A Pending CN102141917A (zh) | 2011-04-02 | 2011-04-02 | 基于IronPython脚本语言的多业务联动实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102141917A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902270A (zh) * | 2012-12-27 | 2014-07-02 | 纽海信息技术(上海)有限公司 | 动态业务建立、管理和处理方法及动态业务*** |
CN106469051A (zh) * | 2015-08-19 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 对象传递方法和装置 |
CN106681781A (zh) * | 2015-11-05 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 实时计算业务的实现方法和*** |
CN107016003A (zh) * | 2016-01-28 | 2017-08-04 | 北京国双科技有限公司 | ***输出数据的展示方法及装置 |
CN111427622A (zh) * | 2018-12-24 | 2020-07-17 | 阿里巴巴集团控股有限公司 | 应用程序中脚本代码的执行方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100487646C (zh) * | 2007-04-17 | 2009-05-13 | 南京中兴软创科技有限责任公司 | 基于python的批价引擎的实现方法 |
-
2011
- 2011-04-02 CN CN2011100844887A patent/CN102141917A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100487646C (zh) * | 2007-04-17 | 2009-05-13 | 南京中兴软创科技有限责任公司 | 基于python的批价引擎的实现方法 |
Non-Patent Citations (2)
Title |
---|
MICHAEL J. FOORD,CHRISTIAN MUIRHEAD: "《IronPython in Action》", 31 December 2009 * |
王国强,张贝克: "基于Python的嵌入式脚本研究", 《计算机应用与软件》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902270A (zh) * | 2012-12-27 | 2014-07-02 | 纽海信息技术(上海)有限公司 | 动态业务建立、管理和处理方法及动态业务*** |
CN106469051A (zh) * | 2015-08-19 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 对象传递方法和装置 |
CN106469051B (zh) * | 2015-08-19 | 2020-03-27 | 阿里巴巴集团控股有限公司 | 对象传递方法和装置 |
CN106681781A (zh) * | 2015-11-05 | 2017-05-17 | 腾讯科技(深圳)有限公司 | 实时计算业务的实现方法和*** |
CN107016003A (zh) * | 2016-01-28 | 2017-08-04 | 北京国双科技有限公司 | ***输出数据的展示方法及装置 |
CN107016003B (zh) * | 2016-01-28 | 2021-01-29 | 北京国双科技有限公司 | ***输出数据的展示方法及装置 |
CN111427622A (zh) * | 2018-12-24 | 2020-07-17 | 阿里巴巴集团控股有限公司 | 应用程序中脚本代码的执行方法及装置 |
CN111427622B (zh) * | 2018-12-24 | 2023-05-16 | 阿里巴巴集团控股有限公司 | 应用程序中脚本代码的执行方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103441900B (zh) | 集中式跨平台自动化测试***及其控制方法 | |
CN110825362A (zh) | 低代码应用软件开发***及方法 | |
CN111310936A (zh) | 机器学***台、装置、设备及存储介质 | |
Pereira et al. | BigActors: a model for structure-aware computation | |
Baldassari et al. | PROTOB: An object oriented methodology for developing discrete event dynamic systems | |
Dideban et al. | Reduction of constraints for controller synthesis based on safe Petri nets | |
JPH04227538A (ja) | プログラム仕様の対話的な設計・検査を支援する方法およびシステム | |
CN102087594B (zh) | 扩展点和插件的管理方法和装置 | |
CN101601012A (zh) | 具有场景支持的面向生成器图形的编程框架 | |
CN110362363B (zh) | 一种基于运行时模型实现对终端应用控制的方法 | |
EP2754033A2 (en) | Parallel processing development environment extensions | |
US11561776B2 (en) | Code-independent graph technology | |
CN102141917A (zh) | 基于IronPython脚本语言的多业务联动实现方法 | |
CN116070305A (zh) | 一种数字孪生体建模实现***、方法和存储介质 | |
CN114115840A (zh) | 用于核电站dcs***应用软件的变量跳转方法和装置 | |
CN117009038A (zh) | 一种基于云原生技术的图计算平台 | |
CN108920143A (zh) | 一种用于人机交互软件的快速开发方法 | |
Dai et al. | Applying IEC 61499 design paradigms: Object-oriented programming, component-based design, and service-oriented architecture | |
CN109597611A (zh) | 前端数据流控制组件开发***、方法、设备及存储介质 | |
CN219980888U (zh) | 一种可二次开发的嵌入式安防监控设备 | |
CN109117124A (zh) | 一种多返回值的函数编程方法 | |
Ravene et al. | Status of the new WEST plasma control system | |
CN112199086B (zh) | 自动编程控制***、方法、装置、电子设备及存储介质 | |
Moreno et al. | Petri nets and Java. Real-Time Control of a flexible manufacturing cell | |
Ortiz et al. | Akka Cookbook |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110803 |