CN115373977A - 实时数据流编程中模式驱动反应的组合 - Google Patents
实时数据流编程中模式驱动反应的组合 Download PDFInfo
- Publication number
- CN115373977A CN115373977A CN202210437492.5A CN202210437492A CN115373977A CN 115373977 A CN115373977 A CN 115373977A CN 202210437492 A CN202210437492 A CN 202210437492A CN 115373977 A CN115373977 A CN 115373977A
- Authority
- CN
- China
- Prior art keywords
- input
- state
- data
- sensor
- agent
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
Abstract
本公开涉及实时数据流编程中模式驱动反应的组合。一种技术实现了数据流图,获取许多数据输入流,并将这些输入转换为多个输出流。数据流图可以执行模式匹配。该技术通过跨连接的输入数据流的模式匹配的组合来实现反应。将输入序列与特定输入模式匹配的完全性可以被表征为具有至少三个不同的程度,例如冷(尚未匹配),温(例如,最小匹配)和热(例如,最大匹配)。要匹配的输入模式可以具有可变长度,包括零长度或无限或任意大的长度。数据流可以基于推送或基于拉取,也可以是组合,并且可以根据状态而改变。
Description
分案申请说明
本申请是申请日为2017年03月23日、申请号为201780019786.3(PCT国际申请号为PCT/US2017/023911)、名称为“实时数据流编程中模式驱动反应的组合”的发明专利申请的分案申请。
技术领域
本公开涉及实时数据流编程中模式驱动反应的组合。
背景技术
本发明涉及计算领域,更具体地涉及实时数据流编程中模式驱动反应的组成,其可以用于边缘计算以处理由工业机器生成的大量数据。
传统的企业软件应用程序托管依赖于数据中心或“云”基础设施来利用规模经济和系统效率。然而,这些数据中心可能任意地远离物理操作点(例如,工厂、仓库、零售店等),企业在这些地方进行其大部分业务操作。工业物联网(IIoT)是指依赖于具有传感器的物理操作仪器的设备或用例集合,这些传感器跟踪频率非常高的事件。
许多行业的工业机器都属于这种物联网(IoT),包括制造业、石油和天然气、采矿、运输、电力和水力、可再生能源、医疗保健、零售、智能建筑、智能城市和联网车辆。尽管云计算取得了成功,但存在许多缺点:将所有数据发送到云存储是不切实际的,因为连接可能并不总是存在,带宽不够,延迟变化太大,或者即使带宽存在但成本太高。即使连接、带宽和成本都不是问题,也没有实时决策并且预测性维护可能导致对机器的重大损害。
因此,需要改进的计算系统、架构和技术,包括改进的边缘分析和数据流编程,以处理由工业机器生成的大量数据。
发明内容
一种技术实现了数据流图,获取多个数据输入流,并将这些输入转换为多个输出流。数据流图可以执行模式匹配。该技术通过跨连接的输入数据流的模式匹配的组合来实现反应。将输入序列与特定输入模式匹配的完全性可以被表征为具有至少三个不同的程度,例如冷(尚未匹配)、温(例如,最小匹配)和热(例如,最大匹配)。要匹配的输入模式可以具有可变长度,包括零长度或无限或任意大的长度。数据流可以基于推送或基于拉取,也基于其组合,并且可以根据状态而改变。
在具体实现中,数据流编程技术用于边缘计算系统。一种方法在边缘实现智能。功能包括:在网关设备或嵌入式系统上托管的软件层中通过传感器数据触发。软件层连接到局域网。软件层可以访问服务、应用程序和数据处理引擎的存储库。通过软件层提供的表达语言将传感器数据与特定条件出现的语义描述相匹配。通过连续执行表达式自动发现模式事件。智能地组合由软件层管理的跨网络嵌入式系统和跨网关设备的服务和应用程序,以链接应用程序和分析表达式。根据资源可用性优化应用程序和分析的布局。监控软件层的运行状况。将原始传感器数据或表达式结果存储在本地时间序列数据库或云存储中。可以对服务和组件进行容器化,以确保在任何网关环境中平稳运行。
在物联网(IoT)数据源处启用边缘智能。系统为实时边缘分析和应用程序提供对于IoT设备传感器数据的丰富的访问(流或批处理模式,或两者)。该系统包括一个高效且富有表现力的计算机语言,用于通过在低内存占用机器中运行的高性能分析引擎,执行分析功能和表达式。该系统允许将聚合数据发布到云以进一步进行机器学习。该系统包括用于开发边缘应用程序的软件开发工具包。基于云的管理控制台允许管理边缘部署、配置、应用程序和分析表达式。
边缘基础设施和平台的具体实现是FogHorn Systems公司。(FogHorn)。FogHorn网站www.foghorn-systems.com、出版物(包括白皮书、用户指南、教程、视频和其他)以及关于FogHorn技术和产品的其他出版物通过引用并入本文。
FogHorn提供平台以为工业和商业物联网(IoT)数据提供边缘智能。数百亿工业和商业IoT设备产生的数据量将足以压倒整个互联网。FogHorn平台在IoT数据产生的地方来--网络边缘处理、分析和响应IoT数据。FogHorn的“智能边缘”软件平台可实现前所未有的自动化水平、运营效率、成本节约等等。
工业物联网(IIoT)由互联的工业和商业设备组成,如传感器、机械和计算机。IIoT的目标是跨分布式企业实现更好的设备控制、数据管理、机器自动化和运营效率。公司可以在边缘应用雾计算,以利用实时分析和自动响应捕获绿色地带IIoT机会,同时利用云计算进行系统级管理和优化。如果添加额外的计算资源不可行,FogHorn边缘计算平台还设计为在现有可编程逻辑控制器(PLC)(例如,棕色地带机会)中运行。棕色地带指的是新系统的实现以解决信息技术(IT)问题领域,同时考虑已建立的系统。新的软件架构考虑了现有和正在运行的软件。
边缘智能平台是一种基于雾计算概念的基于软件的解决方案,其可将数据处理和分析扩展到靠近IIoT设备所在的边缘。保持与边缘设备的紧密接近,而不是将所有数据发送到远程集中式云,最大限度地降低了延迟,从而实现最大化性能、更快的响应时间以及更高效的维护和运营策略。它还显著降低了总体带宽要求和管理广泛分布式网络的成本。
专注于边缘IIoT操作降低了整体带宽需求,并能够立即自动响应时间敏感条件。工业界正在增加数十亿台新的IIoT设备,这些设备每天总共会产生数拍字节的数据。将所有这些数据发送到云不仅成本过高,而且还会产生更大的安全风险。边缘操作可确保更快的响应时间、降低风险并降低总体成本。
2015年8月27日提交的美国专利申请62/210,981和2016年8月29日提交的美国专利申请15/250,720通过引用并入本文并描述了边缘计算环境和平台。2017年3月23日提交的美国专利申请15/467,306通过引用并入本文,并描述了用于实时数据流的高效状态机。2017年3月23日提交的美国专利申请15/467,318通过引用结合于此,并描述了用于实时数据流编程语言的工具和方法。
在一种实现中,一种系统包括:多个代理,每个代理连接到传感器,其中每个代理从传感器接收数据(例如,流数据);以及数据处理组件包括代理连接到的数据总线。数据处理组件通过形成一系列互连的转换将输入流转换成输出流。转换可以包括模式匹配、计算和其他操作。每个转换可以包括一个或多个输入,每个输入给定至少一个外部数据源或转换器作为参考;一个或多个输出,每个输出给定至少一个外部数据接收器或转换器作为参考。尝试将输入模式与输入序列匹配的结果可以具有至少三种不同的状态或完全程度。
在另一实现中,一种方法包括:互连多个代理和传感器,其中代理连接到传感器并从传感器接收数据流;通过一系列互连的转换将来自传感器的输入流转换或转变成输出流。每个转换包括:一个或多个输入,每个输入给定外部数据源或转换器作为参考;以及一个或多个输出,每个输出给定外部数据接收器或转换器作为参考。对于每个输入,都有应用于输入的模式,以过滤、收集和组织原始输入为更有用、部分处理或匹配的形式,或删除错误的输入。在转换器中,触发表达式可用于确定何时评估过滤表达式。
考虑到以下详细描述和附图,本发明的其他目的、特征和优点将变得显而易见,其中相同的附图标记在所有附图中表示相同的特征。
附图说明
图1示出了客户端-服务器系统和网络的框图。
图2示出了客户端或服务器的更详细的图。
图3示出了计算机系统的系统框图。
图4是边缘计算平台的框图,其位于传感器流和云之间。
图5示出了包括边缘分析的边缘计算平台的更详细框图。
图6显示了边缘基础设施和云基础设施之间的操作流程。
图7示出了转换为确定性有限自动机(DFA)和状态减少机器的增强非确定性有限自动机(NFA)。
图8示出了在接收到令牌alpha时从状态A到B的转换。
图9示出了通过额外状态转换,状态X,从状态A到B的转换。
图10示出了由句法分析形成的抽象语法树的示例。
图11显示了用于变更的子图。
图12示出了用于结合的子图。
图13示出了具有结构的闭包。
图14示出了使用物理传感器通过传感器表达式语言引擎创建一些虚拟传感器的示例。
图15示出了流图的示例。
图16示出了各种节点的层次结构。
图17示出了各种边及其对节点的势的层次结构。
具体实施方式
图1是结合了本发明实施例的分布式计算机网络100的简化框图。计算机网络100包括多个客户端系统113、116和119,以及经由多个通信链路128耦合到通信网络124的服务器系统122。通信网络124提供用于允许分布式网络100的各种组件彼此通信和交换信息的机制。
通信网络124本身可以包括许多互连的计算机系统和通信链路。通信链路128可以是硬连线链路、光链路、卫星或其他无线通信链路、波传播链路或用于信息通信的任何其他机制。通信链路128可以是DSL、电缆、以太网或其他硬连线链路,无源或有源光链路,3G、3.5G、4G和其他移动性机制,卫星或其他无线通信链路,波传播链路或用于信息通信的任何其他机制。
可以使用各种通信协议来协助图1中所示的各种系统之间的通信。这些通信协议可以包括VLAN、MPLS、TCP/IP、Tunneling、HTTP协议、无线应用协议(WAP)、供应商特定协议、定制协议等。虽然在一个实施例中,通信网络124是因特网,但在其他实施例中,通信网络124可以是任何合适的通信网络,包括局域网(LAN)、广域网(WAN)、无线网络、内联网、专用网络、公共网络、交换网络以及这些网络的组合等。
图1中的分布式计算机网络100仅仅是说明结合本发明的实施例,并不限制权利要求中所述的本发明的范围。本领域普通技术人员将认识到其他变型、修改和替代方案。例如,一个以上的服务器系统122可以连接到通信网络124。作为另一个例子,多个客户端系统113、116和119可以经由接入提供商(未示出)或通过一些其他服务器系统耦合到通信网络124。
客户端系统113、116和119通常从提供信息的服务器系统请求信息。出于这个原因,服务器系统通常具有比客户端系统更多的计算和存储容量。然而,取决于计算机系统是在请求还是提供信息,特定计算机系统可以充当客户端或服务器。另外,尽管已经使用客户端-服务器环境描述了本发明的各方面,但是应该显而易见的是,本发明也可以实施在独立的计算机系统中。
服务器122负责接收来自客户端系统113、116和119的信息请求,执行满足请求所需的处理,以及将对应于请求的结果转发回请求客户端系统。满足请求所需的处理可以由服务器系统122执行,或者可以替代地委托给连接到通信网络124的其他服务器。
客户端系统113、116和119使用户能够访问和查询服务器系统122存储的信息。在一个具体的实施例中,客户端系统可以作为一个独立的应用程序运行,例如桌面应用程序或移动智能电话或平板应用程序。在另一个实施例中,在客户端系统上执行的“网络浏览器”应用程序使用户能够选择、访问、检索或查询服务器系统122存储的信息。网络浏览器的例子包括微软公司提供的Internet Explorer浏览器、Mozilla提供的火狐浏览器、谷歌提供的Chrome浏览器、Apple提供的Safari浏览器等。
在客户端-服务器环境中,一些资源(例如,文件、音乐、视频或数据)存储在客户端,而其他资源从网络中的其他地方(例如服务器)存储或传送,并且可以通过网络(例如,互联网)存取。因此,用户的数据可以存储在网络或“云”中。例如,用户可以处理远程存储在云(例如,服务器)上的客户端设备上的文档。客户端设备上的数据可以与云同步。
图2示出了本发明的示例性客户端或服务器系统。在实施例中,用户通过计算机工作站系统(如图2所示)与系统交互。图2示出了包括监视器203、屏幕205、外壳207(也可以称为系统单元、机壳或外壳)、键盘或其他人体输入设备209以及鼠标或其他指示设备211的计算机系统201。鼠标211可以具有一个或多个按钮,例如鼠标按钮213。
应当理解,本发明不将任何计算设备限于特定形状因子(例如,台式计算机形状因子),而是可以包括各种形状因子的所有类型的计算设备。用户可以与任何计算设备交互,包括智能电话、个人计算机、膝上型计算机、电子平板设备、全球定位系统(GPS)接收器、便携式媒体播放器、个人数字助理(PDA),其他网络接入设备以及能够接收或发送数据的其他处理设备。
例如,在特定实现中,客户端设备可以是智能手机或平板设备,诸如Apple iPhone(例如,Apple iPhone 6),Apple iPad(例如,Apple iPad或Apple iPad mini),Apple iPod(例如,Apple iPod Touch),Samsung Galaxy产品(例如,Galaxy S系列产品或Galaxy Note系列产品),Google Nexus设备(例如,Google Nexus 6、Google Nexus 7或Google Nexus9)和Microsoft设备(例如,Microsoft Surface平板电脑)。通常,智能手机包括电话部分(和相关的无线电部分)和计算机部分,它们可通过触摸屏显示器访问。
存在用于存储电话部分(例如,联系人和电话号码)和计算机部分(例如,包括浏览器的应用程序、图片、游戏、视频和音乐)的数据的非易失性存储器。智能手机通常包括用于拍摄照片和视频的相机(例如,前置摄像头或后置摄像头或两者)。例如,智能手机或平板电脑可用于拍摄可以流式传输到一个或多个其他设备的实时视频。
外壳207容纳熟悉的计算机组件,其中一些未示出,例如处理器、存储器、大容量存储设备217等。大容量存储设备217可以包括大规模磁盘驱动器、软盘、磁盘、光盘、磁光盘、固定盘、硬盘、CD-ROM、可记录CD、DVD、可记录DVD(例如,DVD-R、DVD+R、DVD-RW、DVD+RW、HD-DVD或蓝光光盘)、闪存和其他非易失性固态存储器(例如,USB闪存驱动器或固态驱动器(SSD))、电池备份的易失性存储器、磁带存储器,读取器和其他类似介质,以及这些介质的组合。
可以使用、存储于、或关联于计算机可读介质来实现本发明的计算机实现的或计算机可执行的版本或计算机程序产品。计算机可读介质可以包括参与向一个或多个处理器提供指令以供执行的任何介质。这种介质可以采用许多形式,包括但不限于非易失性、易失性和传输介质。非易失性介质包括例如闪存、或光盘或磁盘。易失性介质包括静态或动态存储器,例如高速缓冲存储器或RAM。传输介质包括同轴电缆、铜线、光纤线和布置在总线中的电线。传输介质还可以采用电磁、射频、声波或光波的形式,例如在无线电波和红外数据通信期间产生的那些。
例如,本发明的软件的二进制机器可执行版本可以存储或驻留在RAM或高速缓冲存储器中,或存储在大容量存储设备217上。本发明的软件的源代码也可以存储或驻留在大容量存储设备217(例如,硬盘、磁盘、磁带或CD-ROM)上。作为另一个例子,本发明的代码可以通过线路、无线电波或通过诸如因特网的网络进行传输。
图3示出了用于执行本发明的软件的计算机系统201的系统框图。如图2所示,计算机系统201包括监视器203、键盘209和大容量存储设备217。计算机系统501还包括子系统,诸如中央处理器302、系统存储器304、输入/输出(I/O)控制器306、显示适配器308、串行或通用串行总线(USB)端口312、网络接口318和扬声器320。本发明还可以与具有额外或更少子系统的计算机系统一起使用。例如,计算机系统可以包括一个以上的处理器302(即,多处理器系统),或者系统可以包括高速缓冲存储器。
诸如322的箭头表示计算机系统201的系统总线体系结构。然而,这些箭头表示用于链接子系统的任何互连方案。例如,扬声器320可以通过端口连接到其他子系统或者具有到中央处理器302的内部直接连接。处理器可以包括多个处理器或多核处理器,其可以允许信息的并行处理。图2中所示的计算机系统201只是适用于本发明的计算机系统的示例。适用于本发明的子系统的其他配置对于本领域普通技术人员来说是显而易见的。
计算机软件产品可以用各种合适的编程语言编写,例如C、C++、C#、Pascal、Fortran、Perl、Matlab(来自MathWorks,www.mathworks.com)、SAS、SPSS、JavaScript、AJAX、Java、Python、Erlang和Ruby on Rails。计算机软件产品可以是具有数据输入和数据显示模块的独立应用程序。或者,计算机软件产品可以是可以实例化为分布式对象的类。计算机软件产品也可以是组件软件,例如Java Beans(来自Oracle公司)或Enterprise JavaBeans(来自Oracle公司的EJB)。
该系统的操作系统可以是以下各项之一:Microsoft系统系列(例如,Windows 95、98,Me,Windows NT,Windows 2000,Windows XP,Windows XP x64 Edition,Windows Vista,Windows 7,Windows 8,Windows 10,Windows CE,Windows Mobile,Windows RT),Symbian OS,Tizen,Linux,HP-UX,UNIX,Sun OS,Solaris,Mac OS X,AppleiOS,Android,Alpha OS,AIX,IRIX32或IRIX64。可以使用其他操作系统。MicrosoftWindows是微软公司的商标。
此外,计算机可以连接到网络并且可以使用该网络与其他计算机交互。网络可以是内联网、互联网或因特网等。网络可以是有线网络(例如,使用铜线)、电话网络、分组网络、光网络(例如,使用光纤)或无线网络,或这些的任何组合。例如,可以使用以下协议,使用无线网络在计算机和本发明的系统的组件(或步骤)之间传递数据和其他信息,诸如Wi-Fi(IEEE标准802.11、802.11a、802.11b、802.11e、802.11g、802.11i、802.11n、802.11ac和802.11ad等)、近场通信(NFC)、射频识别(RFID)、移动或蜂窝无线(例如,2G、3G、4G、3GPPLTE、WiMAX、LTE、LTE高级、Flash-OFDM、HIPERMAN、iBurst、EDGE演进、UMTS、UMTS-TDD、1xRDD和EV-DO)。例如,来自计算机的信号可以至少部分地无线传输到组件或其他计算机。
在实施例中,利用在计算机工作站系统上执行的网络浏览器,用户通过诸如因特网之类的网络访问万维网(WWW)上的系统。网络浏览器用于以各种格式下载网页或其他内容,包括HTML、XML、文本、PDF和附录,并且可用于将信息上载到系统的其他部分。网络浏览器可以使用统一资源标识符(URL)来标识网络上的资源,并且在网络上传输文件时使用超文本传输协议(HTTP)。
在其他实现中,用户通过本地和非本地应用程序中的任一个或两者访问系统。本地应用程序本地安装在特定计算系统上,并且特定于该计算系统的操作系统或一个或多个硬件设备或这些的组合。这些应用程序(有时也称为“app”)可以通过直接互联网升级修补机制或通过应用程序商店(例如,Apple iTunes和App商店、Google Play商店、WindowsPhone商店以及Blackberry App World商店)进行更新(例如,定期)。
该系统可以在独立于平台的、非本地应用程序中运行。例如,客户端可以使用与一个或多个服务器的网络连接通过来自一个或多个服务器的网络应用程序访问系统,并在网络浏览器中加载该网络应用程序。例如,网络应用程序可以通过因特网由网络浏览器从应用程序服务器下载。非本地应用程序也可以从其他来源获得,例如磁盘。
图4示出了边缘计算平台406的框图,该边缘计算平台406通常在传感器409和云412之间的边缘网关或等同物上运行。边缘计算平台使得能够实现对于管理和优化工业机器和其他工业物联网而言重要的边缘智能。边缘网关的组件包括:摄取421、富集425、复杂事件处理(CEP)引擎429、应用程序432、通过表达式语言的分析435和传输438。云可以包括边缘提供和协调443以及云和边缘分析和应用程序可移植性446。
如上所述,边缘计算平台的具体实现来自FogHorn。FogHorn是在迅速崛起的“边缘智能”领域的领导者。通过提供更接近控制系统和物理传感器的高性能处理、分析和异构应用程序,FogHorn的突破性解决方案实现闭环设备优化的边缘智能。这为制造、石油和天然气、电力和水力、运输、采矿、可再生能源、智能城市等工业客户带来了大量数据和实时实地处理。FogHorn技术受到全球领先的工业互联网创新者以及云计算、高性能边缘网关和IoT系统集成的主要参与者的欢迎。
Foghorn提供:在流和批处理模式下为边缘应用程序提供丰富的IoT设备和传感器数据访问。用于执行分析功能的高效且富有表现力的DSL。功能强大的小型化分析引擎,可在低占用空间的机器上运行。发布功能,用于将聚合数据发送到云以进行进一步的机器学习。用于开发边缘应用程序的SDK(多语言)。管理控制台,用于管理配置、应用程序和分析表达式的边缘部署。
FogHorn提供高效且高度可扩展的边缘分析平台,可实现来自工业机器的传感器数据的实时、实地流处理。FogHorn软件栈是在边缘和云上运行的服务组合。
“边缘”解决方案可以支持将传感器数据摄取到本地存储库中,并且可以选择将未处理的数据发布到云环境以进行离线分析。然而,许多工业环境和设备缺乏互联网连接,使得这些数据无法使用。但即使具有互联网连接,所产生的大量数据也可能轻易超过可用带宽,或者成本太高而无法发送到云端。此外,当数据上传到云,在数据中心处理,结果传回边缘时,采取任何行动可能为时已晚。
FogHorn解决方案通过提供高度小型化的复杂事件处理(CEP)引擎(也称为分析引擎)以及强大且富有表现力的域特定语言(DSL)以表达对大量传入传感器的数据流的规则来解决此问题。然后可以立即使用这些表达式的输出来防止昂贵的机器故障或停机,以及实时提高工业操作和过程的效率和安全性。
FogHorn平台包括:能够在低占用空间环境以及高吞吐量或网关环境中运行。高度可扩展且高性能的CEP引擎,可以对传入的流式传感器数据进行操作。在边缘具有丰富数据访问权限的异构应用程序开发和部署。跨云和边缘的应用程序移动性。云端和边缘之间的高级机器学习(ML)和模型转换。开箱即用,FogHorn支持主要的工业数据摄取协议(例如OPC-UA、Modbus、MQTT、DDS等)以及其他数据传输协议。此外,用户可以轻松地将自定义协议适配器插入FogHorn的数据摄取层。
FogHorn边缘服务在IIoT设备所在的网络边缘运行。边缘软件栈负责将来自传感器和工业设备的数据摄取到高速数据总线上,然后在流数据上执行用户定义的分析表达式,以获得洞察力并优化设备。这些分析表达式由FogHorn高度可扩展且占地面积小的复杂事件处理(CEP)引擎执行。
FogHorn边缘服务还包括用于基于时间的传感器数据查询的本地时间序列数据库和用于开发可以在流和批处理模式下使用数据的应用程序的多语言SDK。可选地,该数据还可以发布到客户选择的云存储目的地。
FogHorn平台还包括在云或预置环境中运行的服务,以远程配置和管理边缘。FogHorn的云服务包括用于开发和部署分析表达式,使用称为Docker(www.docker.com)的应用程序将应用程序部署到边缘,以及用于管理服务与客户的身份访问管理和维持解决方案的集成的管理UI。该平台还能够将在云中开发的机器学习模型转换为可在边缘执行的传感器表达式。
例如,应用程序应用实时数据监视和分析、预测性维护计划和自动流程重定向,以防止由于空穴事件对泵造成损害。另一个例子是使用FogHorn边缘智能软件的风能管理系统,以最大化发电,延长设备寿命,并应用历史分析进行准确的能源预测。
图5示出了边缘计算平台的更详细框图。该平台具有三个逻辑层或部分,数据摄取512、数据处理515和数据发布518。数据摄取组件包括连接到生成数据的传感器或设备523的代理520。代理通过来自相应协议服务器的一个或多个协议从传感器收集或摄取数据。代理可以是针对协议(例如MQTT,OPC UA,Modbus和DDS)的客户端或代理。传感器提供或输出的数据通常是二进制数据流。可以通过推送或拉取方法将这些数据从传感器传输或传递到代理。
推送描述了一种通信方式,其中由发送者(例如,传感器)发起针对给定交易的请求。拉取(或取得)描述了一种通信方式,其中由接收方(例如代理)发起针对信息传输的请求。另一种通信技术是轮询,其中接收器或代理周期性地查询或检查传感器是否有要发送的数据。
MQTT(先前的MQ遥测传输)是基于ISO标准的基于发布-订阅的“轻量级”消息传递协议,用于在TCP/IP协议之上。替代协议包括高级消息队列协议、IETF约束应用协议、XMPP和网络应用消息传递协议(WAMP)。
OPC统一架构(OPC UA)是OPC基金会开发的用于互操作性的工业M2M通信协议。它是开放平台通信(OPC)的继承者。
Modbus是一种串行通信协议,最初由Modicon(现为施耐德电气)于1979年出版,用于其可编程逻辑控制器(PLC)。它简单而强大,从而成为所有意图和目的的标准通信协议。它现在是连接工业电子设备的常用手段。
数据处理515包括数据总线532,其连接到数据摄取层的代理520。数据总线是所有连接组件之间数据和控制消息的中心主干。组件订阅数据并控制流经数据总线的消息。分析引擎535是一个这样的重要组件。分析引擎基于在表达式语言538中开发的分析表达式来执行传感器数据的分析。连接到数据总线的其他组件包括配置服务541、度量服务544和边缘管理器547。数据总线还包括“解码器服务”,其通过将原始二进制数据解码为可消费数据格式(例如JSON)来丰富来自传感器的传入数据,并且还使用其他必要且有用的元数据进行修饰。此外,丰富性可以包括但不限于数据解码、元数据修饰、数据归一化等。
JSON(有时称为JavaScript Object Notation)是一种开放标准格式,它使用人类可读的文本来传输由属性-值对组成的数据对象。JSON是用于异步浏览器或服务器通信(AJAJ)或两者的常见数据格式。JSON的替代是XML,它被AJAX使用。
边缘管理器连接到云412,并且特别是连接到云管理器552。云管理器连接到用于客户身份和访问管理(IAM)555和用户界面控制台558的代理,其也在云中。还有可以通过云访问的应用程序561。身份和访问管理是一种安全和业务规则,使正确的个人能够在正确的时间以正确的原因访问正确的资源。
在数据处理515内,软件开发工具包(SDK)564组件还连接到数据总线,这允许创建可以部署在边缘网关上的应用程序567。软件开发工具包还连接到本地时间序列数据库以获取数据。应用程序可以集装箱化,例如使用诸如Docker之类的集装箱技术。
Docker集装箱将一个软件包装在一个完整的文件系统中,该系统包含运行所需的一切:代码、运行时间、系统工具和系统库--可以安装在服务器上的任何东西。这可确保软件始终运行一致,无论其运行环境如何。
数据发布518包括连接到云中的存储位置573的数据发布器570。此外,软件开发工具包564的应用程序567可以访问时间序列数据库576中的数据。时间序列数据库(TSDB)是针对处理时间序列数据而优化的软件系统,由时间索引(例如,日期时间或日期时间范围)的数字阵列。时间序列数据库通常是滚动或循环缓冲区或队列,其中当新信息添加到数据库时,将删除最旧的信息。数据发布器570还连接到数据总线并订阅需要存储在本地时间序列数据库或云存储中的数据。
图6示出了边缘602和云基础结构之间的操作流程。上面描述了一些特定的边缘基础结构。从传感器606收集数据。这些传感器可以用于工业、零售、医疗保健或医疗设备、或电力或通信应用,或这些的任何组合。
边缘基础设施包括软件平台609,其具有数据处理612、本地时间序列数据库615、云库618、分析复杂事件处理引擎(CEP)621、分析实时流式域特定语言(DSL)624(例如,Foghorn的Vel语言),以及实时聚合和访问627。平台可以包括虚拟传感器630,下面将更详细地描述虚拟传感器630。虚拟传感器提供丰富的实时数据访问。
该平台可通过一个或多个应用程序633(例如应用程序1、2和3)访问,其可使用软件开发工具包或SDK开发。应用程序可以是异构的(例如,以多种不同语言开发)并利用复杂事件处理引擎621,以及执行机器学习。可以使用应用商店637来分发应用程序,应用商店637可以由边缘平台开发者或边缘平台的客户(可以被称为伙伴)提供。通过应用商店,用户可以下载并与他人共享应用。应用程序可以执行分析和应用程序639,包括机器学习、远程监控、预测性维护或操作智能,或这些的任意组合。
对于应用程序,边缘和云之间存在动态应用程序移动性。例如,使用FogHorn软件开发工具包开发的应用程序可以部署在边缘或云端,从而实现边缘和云之间的应用程序移动性。这些应用程序可以用作边缘的一部分或作为云的一部分。在实现中,由于应用程序是集装箱化的,因此可以实现此功能,因此它们可以独立于执行它们的平台进行操作。分析表达式也是如此。
存在允许集成监管和管理640的数据应用程序,包括在云中或在私有数据中心644处监视或存储数据。
物理传感器是电子传感器,其测量其环境的一些特性作为模拟或数字测量。通常使用模数转换器将模拟测量转换为数字量。传感器数据可以根据需要进行测量(轮询),也可以统一速率作为流进行测量。典型的传感器规格包括范围、精度、分辨率、漂移、稳定性和其他属性。大多数测量系统和应用程序直接利用或传递传感器数据以进行处理、运输或存储。
该系统具有“可编程软件定义传感器”,也称为虚拟传感器,其是使用分析表达语言创建的基于软件的传感器。在实现中,分析表达式语言是FogHorn的分析表达式语言。这种表达语言称为Vel。Vel语言得到有效实施,以在具有低执行延迟的限制性低占地空间环境中支持实时流分析。例如,系统的延迟可以是大约10毫秒或更短。
在实现中,可编程软件定义传感器使用称为“传感器表达语言”或SXL的声明性应用程序接口(API)来创建。SXL语言的具体实现是来自FogHorn的Vel。Vel传感器是通过该构造创建的Vel传感器,并且提供来自由多个源(包括物理传感器和Vel传感器)生成的处理数据的导出测量。在此应用中,Vel和SXL可互换使用。
Vel传感器可以从这三种来源中的任何一种或其组合获得:
1.单个传感器数据。
1.1.源自单个物理传感器的虚拟或Vel传感器可以使用动态校准、信号处理、数学表达、数据压缩或数据分析或任何组合的来转换传入的传感器数据。
2.多个物理传感器数据。
2.1.虚拟或Vel传感器或作为来自多个异构物理传感器的转换(使用上述方法)导出的。
3.物理传感器数据和虚拟传感器数据的组合可用于Vel传感器设备的实现。
Vel传感器是特定于域的,并且在考虑特定应用的情况下创建。Vel编程接口的特定实现使应用程序能够通过转换(例如,数学表达式)和聚合来定义数据分析。Vel包括一组数学运算符,通常基于编程语言。Vel传感器通过执行Vel结构或程序在运行时间对数据进行操作。
Vel传感器的创建。Vel传感器被设计为软件设备,以使数据实时可用。这需要在嵌入式计算硬件上实时执行使用Vel开发的应用程序,以便以应用程序所需的速率生成Vel传感器数据。该系统包括一个高效的执行引擎来实现这一目标。
Vel传感器的优点包括:
1.可编程性。Vel使Vel传感器可编程以合成数据,以满足数据质量、频率和信息的特定应用要求。Vel传感器可以广泛分布为空中软件升级,以插入来自物理传感器和其他(例如,预先存在的)Vel传感器的数据。因此,应用程序开发人员可以创建有助于业务逻辑高效执行的数字基础结构,而与物理基础结构的布局无关。
2.可维护性或透明度。Vel传感器在应用程序和物理传感器之间创建数字抽象层,使开发人员能够与由于对物理传感器的升级和服务所导致的物理基础结构中的变化隔离开来。
3.效率:Vel传感器通过将来自物理传感器的原始数据转换为包含在其中的信息的精确表示,从而提高信息管理的效率。这种效率转化为有效利用IT资源,如应用程序下游的计算、网络和存储。
4.实时数据:Vel传感器提供从真实世界或物理传感器数据流计算的实时传感器数据。这使得数据可用于具有最小时间延迟的应用程序。
实现方式。该系统基于Vel接口构建了Vel传感器的可扩展、实时实现。Vel包括Java语言支持的运算符,并与物理传感器及其协议很好地集成。
该系统带来了一种新颖的方法,用于精确地表达对要执行的物理传感器数据的操作。该声明性表达式将数字抽象的定义与物理传感器上的实现分开。
给定一组不同类型的数据流和一组用于响应和处理那些流中的特定数据模式的函数,本发明是一种描述和转换这些函数以便当数据到达流时可以适当并且高效调用它们的技术。
解决这类问题的需要通常出现在所有形式的数据流编程中。它适用于非常大规模的体系结构,例如企业数据中心内部和之间的数据流,以及非常小规模的体系结构,例如嵌入式设备中的事件流。
本发明适用于数据流编程的所有领域;然而,它最适合于能够检测到匹配并且应用处理功能的速度具有最高重要性的情况,以及用于执行的存储和计算资源有限的情况。
示例。从给定的整数流中,我们希望匹配一个或多个非零值,后跟一个或多个零。当匹配此模式时,我们希望计算非零值的总和,并将结果写入另一个流。
我们可以用正则表达式表示法编写该问题的模式匹配部分,然后另外将和的计算写为算术的表达式。此时,设计用于边缘计算中的数据流应用程序的Vel编程语言允许我们以统一的表示法编写整个转换,因此:
该技术将上述函数参数化转换为状态机。然后,它将基于该状态机将匹配实现为确定性有限自动机,并将得到的匹配馈送到求和表达式。该流程在图7中示出。这是状态0705,状态1 710,“来自列表a”块715,以及“推送和(a)”块720。
可以通过为每个处理函数生成匹配函数来解决该问题。匹配函数接受来自流的数据窗口作为输入,并且对于匹配返回真(true),对于非匹配返回假(false)。当数据流过窗口时,必须重复应用匹配函数,直到找到匹配为止。找到匹配后,将应用处理函数。
出现这种解决方案是因为处理函数以类似于用于数据库查询的方式进行规定。类似SQL的WHERE子句提供了一个描述匹配条件的布尔表达式,匹配函数是该表达式的直接编译。
当新数据流入流缓冲区时,必须单独评估单独的匹配函数。为每个函数独立确定匹配。
使用状态机来执行匹配比重复应用多个任意布尔表达式更高效。
本发明从声明函数的参数的模式描述语言导出状态机。与传统的布尔表达式匹配函数相比,所导出的状态机更高效地检测数据流中的匹配。
所导出的状态机还可以为数据流中检测到的匹配实现一组处理函数。可以组合多个匹配和相应的处理函数,并将其简化为高效地识别任何处理函数的匹配的单个状态机。
所导出的状态机还可以被扩充以包括通过附加节点的自由(ε)转换,而不改变状态机识别的序列。
通过这样的附加节点的转换可以触发对数据的各种动作。例如,它可以触发将确定性有限自动机(DFA)或栈机器的移位缓冲器中的数据收集到保持区域中。这些数据可能稍后形成函数应用参数的基础。
此应用程序使用术语DFA,但这些自动机或单元可以称为栈机器。严格地说,确定性有限自动机意味着有限的空间性能。然而,该专利中的自动机不一定是有限的,也可以是非限定但仍然简单的。因此,该专利中描述的DFA可以是非限定的。
通过这样的附加节点的转换还可以使用在先前节点中捕获的数据作为函数应用参数来触发处理函数的调用。
从结合了正则表达式和值表达式方面的脚本进行的转换产生了一个增强状态机或DFA,它可以高效地匹配模式和计算值。
所得到的组合的匹配或计算算法比模式匹配和值计算的单独组织更高效。
一种从词汇源构建DFA或状态机的方法,从非确定性有限自动机(NFA)开始,然后将其减少到最小DFA。DFA的目的是识别输入数据系列中的模式。出于本讨论的目的,我们将调用流经状态机令牌的数据和DFA识别的特定模式作为令牌的语言。
考虑图8中NFA的部分。这部分也恰好是DFA,但这对于这个例子来说并不重要。一旦接收到令牌α,它就从状态A 805转换到状态B810。
我们可以通过添加具有ε转换920的附加节点来增加该NFA,如图9所示。可以随时跟随ε边--可以说是自由,无论输入状态如何。
一个或多个ε边的存在使状态机不确定;然而,可以通过算法去除ε边,通过这种方式将NFA减少到等效DFA,其可以通过表驱动方法有效地实现。因此,我们可以引入这些额外的ε转换,同时仍保留高效实施的策略。
图9中的状态机在接收到令牌α925时将从状态A 905转换到状态X915,然后可以随意从状态X继续到状态B 910。α的推动仍然导致从状态A到状态B的转换,就像在图8中的简单机器中那样,并且不需要额外的输入来实现这种转换。因此可以看出,图9中的NFA翻译了与图8中相同的语言。它只是通过状态X进行额外的状态转换,以实现这种转换。
额外的状态很有用,因为我们可以将副作用的表现与之联系起来。只要这些副作用既不改变状态机的定义也不改变流经状态机的数据,附加节点对语言识别没有影响,但副作用可以做额外的工作。
在数据流反应实现中,额外的工作可以包括对数据的任何数量的有用动作或使用数据。在一个示例性实现中,这些工作可以包括:
1.检查流经节点的数据并将其副本发送给外部收集器;
2.当数据流过节点时对数据应用转换并收集转换的数据再临时缓冲区中;或者
3.将收集的数据从临时缓冲区刷新到另外的转换中,并将结果推送到另一个DFA或栈机器。
作为示例,让我们考虑源片段:
该片段描述了由两项组成的模式:(1)第一项,称为a,其匹配非零值的一个或多个重现。(2)第二项,未给出名称,与零的一个或多个重复匹配。
让我们假设我们希望将此作为反应的基础。我们将从一个被调入的源中读取值,当我们在输入中识别出片段的模式时,我们将通过评估片段的右侧并将结果推送到被调出的目的地来做出反应。
例如,如果由值[101,202,303,0,0]组成,我们将通过将前三个值与a绑定,最后两个值与匿名第二项绑定来匹配模式。然后我们通过将求和函数应用于绑定到a的值列表[101,202,303]来评估右侧,返回606。然后我们将606推送出。
诸如在根据本发明的该示例中的函数模式的转换可以通过计算机执行的转换程序来实现。该程序必须执行两种不同的转换形式:将面向函数的部分“sum(a)”转换为可执行计算的可执行语句块,并将面向模式的部分“a:{!=0}..{>0},:0..{>0}”转换为识别模式、捕获参数并调用函数的DFA或栈机器。我们称前者任务为函数转换,称第二任务为模式转换。
专门编写编译器和解释器的计算机程序员很好地理解函数转换。模式转换、函数转换和模式转换的拟合以及模式识别和函数分派的后续自动化是本发明的主题。
函数转换包括接受源文本,将文本分解为令牌,然后在语法的引导下,安排令牌以使它们形成描述源文本的语法内容的抽象语法树(AST)的叶子。然后,抽象语法树由一系列算法遍历,这些算法最终产生评估源所描述的函数所需的指令块。
模式转换以由上述语法分析形成的抽象语法树开始。抽象语法树将包含一个或多个节点,这些节点构成模式声明的根。例如,我们上面的模式可能包含一个根节点有两个子节点,每个子节点描述模式的一项,如图10的左下部分所示。在图10中,有反应根节点1005,模式根节点1010,sum(a)节点1015,a节点1020和<no name>节点10。
指定它作为匹配的示例和与其匹配的重现,识别模式项节点携带与正则表达式中的项相同的信息。另外,子节点序列一起按顺序指定与正则表达式项的线性连接相同的信息。正则表达式或正则表达式项的线性连接可以被翻译成NFA。我们已经发现可以在本发明中使用相同的算法,其中模式项代表正则表达式项。
一旦基本的NFA形成,我们可以在模式项需要动作的位置注入我们的额外的、副作用诱导状态,并且在接受状态之后,调用反应的函数。
为了继续我们的示例,项a要求我们收集与其匹配的值的列表,以便我们最终可以将它们作为参数传递给反应的函数。因此,我们将图9中描绘的转换应用于由项a产生的NFA状态,并使用新状态来进行收集匹配项的工作。然后我们再次应用转换,这次是NFA接受状态,并使用收集的值来调用反应的函数,将结果推送给反应的消费者,并清除收集缓冲区。在此增强的NFA转换为DFA并且状态减少之后,我们留下图7中描绘的机器。
这些步骤用于将NFA转换为DFA,状态减少DFA,以及将DFA呈现为状态-动作表,因为是使用状态-动作表来驱动状态机引擎的算法。
通过本发明的技术产生的NFA可以被转化并呈现为表格。但是,所产生的表包括额外的列,该列由在通过每个状态时要执行的副作用λ组成。与其他技术不同,使用这种状态-动作-λ表的自动化引擎每次进行转换时都会执行额外的λ。
一种用于描述和转换用于数据流计算环境的反应函数的方法,包括:(i)识别反应函数;(ii)识别为该函数提供输入的参数模式;(iii)根据传递给函数的参数识别要评估的表达式;(iv)将参数模式转换为能够识别与模式匹配的输入序列的状态机;(v)使用附加的状态来增强状态机,这些状态用于收集和转换输入数据以准备将其用作函数的参数;以及(vi)将状态机减少到能够通过简单的软件或硬件自动化的状态-动作-效果表。
给定一组函数和一系列值作为参数,本发明是一种将执行分派给参数匹配的函数或确定参数不匹配任何函数的方法。这种方法的新颖之处在于,通过组合值表达式、类型表达式和正则表达式,它可以在没有歧义的情况下匹配类型系统中可表示的任何值序列。
解决这类问题的需要出现在转换器、解释器和编译器的发展中,并且与多态调度的概念密切相关。如果考虑构成序列的任意前缀的元素构成单个对象(元组),那么调度到正确函数的任务可以被认为等同于元组类的方法的多态调度。
本发明适用于需要这种多态分派的任何情况。这包括所有必须响应源自程序外部的数据流的事件驱动或反应程序方式。本发明在涉及多个数据流的实时处理的应用中特别有用,例如经常发生在边缘或雾计算或网络环境中。
正则表达式通常用于检测符合特定模式的字符串。有许多密切相关的正则表达式语言,以及许多基于它们实现高效匹配引擎的工具。这些通常限于匹配字符序列。
还有其他基于模式的符号,它们在字符串以外的域上运行。一个例子是XPATH,它描述了XML文档中的模式。这些符号通常不如正则表达式完整且功能较弱,并且针对特定域进行了定制。
一些编程语言通过基于类型的模式匹配系统实现运行时多态调度。定义函数的多个重载,每个重载采用不同的类型和值的模式,并且通过将参数的类型和值与函数参数的模式相匹配,在运行时解析调度。Haskell就是这样一种编程语言。
语言规范语言将无上下文语法描述为一系列生产规则。这些规则构成了语言的语法。编译器-编译器将这些规则转换为表驱动的确定性有限状态机,该机器可以识别该语言的实例。Bison是这种语言规范语言及其相关编译器-编译器的一个例子。
语法驱动的模式匹配系统(如正则表达式)由于可以表示为确定性有限自动机(DFA)或状态机等简单机器而具有高效执行的优势,但它们缺乏完整类型系统的广泛建模功能。类型驱动的模式匹配系统(例如Haskell中使用的系统)具有更丰富的建模功能,但通常会牺牲可支持合理有效实现的功能,但仍然不如基于DFA的高速匹配系统那样高效。
本发明涉及一种基于类型的匹配系统,该系统可以匹配其类型中可表示的所有状态,并且仍然可以高效地实现为状态机。类型和状态的通用模式被转换为表驱动状态机,其将高效地识别模式的实例。
基于这些模式定义函数参数允许函数恰好匹配任何任意数据模式,并且在匹配中,从匹配数据元素中绑定其参数。描述函数联合的匹配模式的状态机是通过合并成员函数的状态机,然后将结果减少到最小数量的状态而形成的。过载之间的消歧或整体不匹配的检测尽可能早地在序列中发生,从而加速了函数应用的解析。匹配也可以延迟到序列中尽可能晚,产生函数的“贪婪”版本,该版本将接受尽可能多的输入。
一种方法结合了值表达式、类型表达式和正则表达式,使得它可以在没有歧义的情况下匹配类型系统中可表示的任何值序列。此方法解析函数应用程序,并以最少的决策调度到正确的重载。该方法允许重载的函数应用程序执行与无上下文语法相同的工作,通过递归地识别语法子组件来识别特定语言并向其应用转换函数。
该方法适用于包括多种不同类型的类型系统,例如:(1)基础单态类型集合,例如整数、实数和字符串。(2)多态类型及其构造函数集合,特别是具有某些属性的多态集合类型,我们将在下面简要讨论。(3)总和类型。(4)记录形式的产品类型。(5)模式形式的产品类型,它是元组的一般化,包括其字段的重复。(6)λ类型,它将模式类型映射到任何类型。(7)以及,多λ类型,由λ的列表组成。
集合是由一个或多个元素范围组成的多态类型。集合类型在其包含的元素类型上进行参数化,使得例如整数集合是与字符串集合不同的类型。集合类型的特征还在于其内容的限制。特别地,集合类型可以被约束为有限的或无限的,或者在其左侧或右侧闭合或开放,或者这些的任何组合。
请考虑以下整数集的示例:
表A
[>=1]和[>0]之间没有区别,因为元素是整数类型,并且整数可以明确地枚举。如果元素是不可数类型的,例如实数或字符串,则必须明确包含或包含特定端点。例如,集合[>=“cat”]由字符串“cat”和在“cat”之后按字典顺序排序的所有字符串组成。
我们可以使用集合的实例作为类型。这种类型的实例必须是该集合的成员。例如,用作类型的集合[>0]将仅允许正整数作为值。事实上,人们可能会以这种方式思考所有类型。例如,单态整数类型可以被认为是包括所有整数的集合的集合类型。
我们的总和类型是其他类型的简单联合。例如,整数或字符串类型是其两种组成类型的总和。任何总和类型的组成类型的任何实例也是总和类型的实例。例如,这允许我们描述类型列表(整数或字符串)(int or string),它是值列表,每个值都是整数或字符串。联合的并集变平,因此类型表达式(整数或字符串)(int or string)或(整数或实数)(intor real)等效于整数或实数或字符串。联合中类型的顺序并不重要,但为了规范性,我们在此提供所有联合类型,使得它们的组成按字母顺序排列。
我们的记录类型使用命名字段并将每个字段与类型相关联。例如:{birthday:date;first_name:string;last_name:string}。记录类型始终具有有限数量的字段,并且每个字段在该类型中具有唯一的名称。字段的顺序并不重要;{x:int;y:int}与{y:int;x:int}相同;但是,正如我们为联合所做的那样,我们将按字母顺序列出其组成的记录类型。
请注意,记录的类型本身就是记录。值{x:3;y:4}的类型为{x:int;y:int}。
我们的模式类型与元组类似,因为它被定义为类型序列;然而,虽然元组隐式假设它的每个元素只出现一次,但是模式允许它的每个元素都重复出现。重复出现作为整数集合给出。例如,模式<a:int#[1..3];b:string#[1..3]>匹配一到三个整数,后跟一到三个字符串。
当用作λ的参数时,模式的字段会产生在λ评估中绑定的参数。例如,在我们匹配前一段中给出的模式之后,我们将在范围内有两个本地标识符a和b。A的值是一到三个整数的列表,并且b的值是一到三个字符串的列表。
对于模式中的一个或多个字段没有名称也是有效的。没有名称匹配但没有值的字段作为参数绑定。例如,如果我们匹配<a:int#[1..3];string#[1..3]>,我们将按照之前的方式匹配--一到三个整数后跟一到三个字符串--并将整数绑定为一个名为a的列表,但我们不会绑定字符串。
模式可以具有无限长度。例如,模式<a:int#[1..]>将匹配一个或多个整数而没有上限。这是有效的;但是,如果用于处理无限输入流,则无限模式必须与其他触发配对,例如时间间隔,它将指示何时停止收集值。
通常,模式将消耗它匹配的数据;但是,可能只消耗该数据的一部分,或者根本不消耗。模式可能包含at标记,称为顶点,超出该标记,它将匹配数据并绑定参数,但不会从输入流中消耗。例如,模式<a:int;b:int;顶点;c:int>将匹配三个整数并绑定三个本地标识符,但只消耗输入中的两个整数。
拥有没有字段的记录或没有字段的模式是有效的。这两种情况在意义上彼此无法区分,因为它们都表示产品类型。从词汇上讲,我们用关键字空(void)指定这个概念。空是一种独特的值;它也是它自己的类型。在联合(union)中使用时,空会产生一个可选类型的概念,例如整数或空,这意味着一个值,如果存在则为整数,但可能根本不存在。
就我们的目的而言,类型匹配是结构性的,而记名性的。类型没有名称,只有描述。具有相同描述的两种类型是相同类型。描述是另一种类型的子集的类型是该类型的概括。例如,考虑类型{x:int;y:int}和{x:int;y:int;z:int}。具有两个字段--x和y--的类型是具有三个字段—x、y和z--的类型的子集,因此前者可以被认为是后者的概括。对于模式也是如此。作为另一个模式的前缀的模式也是它的概括。
我们的λ类型将输入模式映射到输出类型。例如<int#[1..3]>→int,这是一个函数的类型,它取一到三个整数并返回整数。我们的多λ类型由λ类型列表组成。λ的顺序在这里很重要。当我们解析多λ应用程序时,我们将调度到匹配的组成λ的第一个。
以这种方式定义,分派多λ所需的模式匹配可以简化为确定性有限自动机(DFA)。为了演示如何简化,我们将使用状态机构造方法作为比较的基础,并在必要时对其进行扩充。描述包括首先构造一个非确定性有限自动机(NFA),然后将其简化为DFA;然而,实际上,这通常可以在一个步骤中完成。
如前所述,该申请使用术语DFA,但是这些自动机或单元可以称为栈机器。严格地说,确定性有限自动机意味着有限的空间性能。然而,该专利中的自动机不一定是有限的,但可以是非限定但仍然简单的。因此,该专利中描述的DFA可以是非限定的。
首先,多λ的组成--各个模式--必须被认为是替换的元素。在翻译正则表达式时,语法a|b(a OR B)是替换:匹配a 1105或匹配b 1110。在我们的例子中,a和b每个都是λ模式。我们根据图11构建用于替换的子图。
我们首先通过连接表示单个模式的字段。在翻译正则表达式时,语法ab 1210是一个连接:匹配a 1205,然后是b 1215。在我们的例子中,a和b每个都是模式的字段。我们根据图12构造了用于连接的子图。
[177]字段的重复因子与正则表达式中的闭包相同,通常写为a+或a*或a{n:m}。同样,我们可以使用类似于图13中的结构来表示这些闭包。在这种情况下,基于重复集的值,子图中的一些变化是必要的。例如,如果该集合包括零,则仅包括从节点i 1305到节点j1310的前向ε1315。这些变化在很大程度上是显而易见的,并且与此处提出的相同基本思想一致。
中间NFA完成后,我们将其减少为DFA,然后状态减少DFA,直到达到最小DFA。然后,我们将DFA表现为状态-动作表,适用于自动化状态机中常用的软件或硬件的自动化。此表的接受状态标记多λ的入口点,并且中间状态提供用于绑定参数的数据集合。
当DFA如此自动化并被提供输入流时,它将匹配来自流的输入的前缀并调度到正确的重载以处理它们,从而产生计算结果。如果允许重复此过程,则结果是一系列产生结果,每个来自输入流的匹配一个产生结果。这通过由数据流中检测到的各种类型的参数的相应模式触发的多态函数提供输入数据流的高效实时处理。
一种用于响应于包含多种函数参数的数据流来调度多态函数的执行的方法,包括值和类型标识符的混合,包括:(i)识别要执行的多态函数,所述多态函数具有多个重载,每个重载与不同种类的参数模式相关联。(ii)通过匹配重载的参数模式,为每个重载标识要在输入流绑定的参数值集合上评估的输出表达式。(iii)将每个重载的参数模式转换为DFA,它将有效地识别输入流中模式的匹配。(iv)将单个重载的DFA组合成单个DFA,用于作为整体的多态函数,得到的组合DFA能够匹配各个DFA匹配的任何模式,并选择应处理匹配输入的重载。(v)将数据流应用于组合DFA,然后DFA根据需要从流中检查或消费数据或两者以确定匹配或不存在匹配,并且在匹配的情况下,适当地绑定输入参数值并选择要评估的适当输出表达式。(vi)调度输出表达式的评估并返回结果。
给定由反应函数产生的一组不同类型的数据流,本发明是一种表示那些流的技术,使得它们的输出可以有效地组成单个统一类型的流。
解决这类问题的需要通常出现在所有形式的数据流编程中。它适用于非常大规模的体系结构,例如企业数据中心内部和之间的数据流,以及非常小规模的体系结构,例如嵌入式设备中的事件流。
本发明适用于数据流编程的所有领域;然而,它最适合于能够检测到匹配并且应用处理函数的速度具有最高重要性的情况,以及用于执行的存储和计算资源有限的情况。
示例。考虑由一组n个单独的输入流组成的流入,Ai:0<k<n。每个流由Ti类型的元素队列组成。每个流由Ti→Ui类型的反应函数fi消耗和变换,这样存在流出的n个流Bi,每个流由Ui类型的元素队列组成。我们希望使用ΣTk→ΣUk类型的合并函数m将所有流Bi合并到单个流C中。
以下是使用Vel语言编写的三个流之间发生此类合并的示例:
流C将由来自B0、B1和B2的值组成,在生成它们时交织。请注意,没有必要实现B流的内容,因为它们仅用于组成C流。它们可以很容易地表示为匿名的临时子表达式:
本发明描述了将每个变换函数fi转换为确定性有限自动机(DFA),并且将作为这些DFA的联合的合并函数m转换为单个最小的DFA。结果是将流入Ai合并到流出C的最高效的手段,而不必实现中间流Bi的内容。
可以重复应用该技术,将后续的中间流层合并为单个反应函数。这与在声明性数据流语言中由中缀或运算符表示的合并的概念一致,如Vel中的情况。
这个问题可以通过蛮力来解决;即,通过实现中间流然后消耗它们,即使合并功能是中间流的唯一消费者。
通常情况下,合并功能要求其流入和流出都是相同类型的,或者在无类型系统的情况下的无差别类型。这是由于类型系统中缺少联合类型(也称为求和类型)。数据流系统中存在真正的合并要求使用联合类型。
某些数据流系统缺少真正的合并,而是实现多输入单输出反应变换。尽管这些构造本身是有用的构造,但它们并不像真正的合并函数那样简单或通用,并且不能完全优化。
将匹配函数表示为DFA比将其表示为布尔类型的任意表达式更高效。多个匹配函数的DFA(每个都具有其自己的驱动流入)被统一以形成单个高效DFA,其表示具有单个流出的合并功能。可以进行DFA的合并,使得结果尽可能早地匹配或尽可能晚地匹配,从而产生两种不同的、可能期望的行为。将多个反应组合成单个DFA会产生最小的机器;也就是说,使用最少数量的决策执行所有匹配的算法。对于小型平台而言,最小机器最适合实现多个反应。最小机器比匹配表达式的多个单独评估具有算法优势,因此,在其他条件相同的情况下,将更高效地执行。
要将转换DFA集合并为单个DFA,我们必须将它们视为正则表达式中的替换。在翻译正则表达式时,语法a|b是替换:匹配a或匹配b。在我们的例子中,a和b每个都是来自转换函数的DFA。我们根据图11构建了替换的子图。
在中间非确定性有限自动机(NFA)完成之后,我们将其减少为DFA,然后将DFA状态减少直到达到最小DFA。然后,我们将DFA表现为状态-动作表,适用于自动化状态机中常用的软件或硬件的自动化。此表的接受状态标记合并数据元素发送到输出流的点。
当DFA如此自动化并被提供一组输入流时,它将根据与该输入相关联的原始变换函数变换每个输入,并将所有结果在单个输出上交织在一起。
一种用于将多个独立的输入数据流合并成单个输出数据流的方法,包括:(i)识别多个潜在的输入数据流。(ii)识别多个变换函数,每个输入流一个,这些变换函数将对每个输入流中的数据执行,并且其结果被合并在一起。(iii)识别合并函数,该合并函数同时从多个流接收输入数据元素并将数据元素交织成单个输出流。(iv)将每个变换函数转换为DFA,其将高效地执行变换。(v)将变换DFA合并为单个组合DFA,其将高效地执行变换并将结果交织成单个流。(vi)将数据流应用于组合DFA,然后DFA执行变换和合并工作。(vii)将合并的输出调度到目的地以供使用。
本发明是用于以Vel编程语言开发软件的工具和相关方法。Vel是一种用于表达数据流程序的编程语言。正确的数据流编程带来了许多挑战。有些是所有形式的计算机编程常见的挑战,而其他则是特定于数据流范例的。该工具解决了Vel编程的许多方面,包括:(1)检查语法和语义的正确性。(2)检查逻辑正确性。(3)调试协助。(4)将源代码翻译成安全可移植的形式(即打包代码)。(5)将源代码或打包代码翻译成适合各种计算平台(特别是小平台)的本机和最佳二进制形式。(6)描述打包的代码并确认其签名。(7)打包代码的批处理模式解释。(8)Vel源的交互解释。(9)模拟运行打包代码或本机代码的数据流环境。(10)在实时数据流环境中远程执行、监视和控制二进制代码。
这些是任何以Vel语言开发软件的人都需要完成的任务。本发明在所有这些领域中提供了足够的支持,以使精通Vel编程的人能够生产正确和有用的软件。
检查句法和语义正确性是许多形式的自动软件翻译所共有的任务。用于检查逻辑正确性的工具通常不包含在翻译工具本身中。这些类型的工具通常是单独存在的,通常对它们正在测试的代码有不完全的了解。
虽然调试是软件开发中的常见任务,但大多数调试工具都专注于命令式编程。功能和反应式编程的调试不太常见,因为它提出了与命令式调试截然不同的挑战。特别是,在这些语言中检查“飞行中”的计算可能很困难,因为它们的值通常没有调试器(和调试程序员)可以窥视的地址。
对于系统语言的编译器(例如C)来说,定位多个本机平台体系结构的能力并不少见,但它不是在脚本级语言中常见的能力。脚本语言往往不会被编译,或者为其主机进行部分编译或即时编译(jitted),但是交叉编译(在一个体系结构上运行但在另一个体系结构上生成代码的编译器)并不常见。专门编译脚本级语言以便在小型平台上执行是非常罕见的。
交互式壳(shell)是脚本语言的共同特征。例如,Python实现了壳。连接到数据流环境(实际或模拟)的壳远不常见。
编译代码的远程执行是某些操作系统的特征,也可以从几个第三方工具获得,包括开源和商业。这些往往不是专门针对小型平台,但确实存在一些针对小型平台的远程执行工具的示例。它们不是特定于数据流编程的,并且不包含在用于开发远程执行程序的工具中。
用于开发Vel代码的单一集成工具对于使用Vel语言的软件开发人员来说非常有用和方便。该工具主要是一个编译器,翻译Vel语言,但它还提供了与Vel编程相关的几组其他功能。让工具执行逻辑正确性测试以及语法和语义正确性测试有助于开发人员提高效率并提高代码的正确性。逻辑测试利用编译器对代码的洞察力,因此诊断消息可以更完整。交互式壳使开发人员能够测试代码并立即得到响应。这对于开发和调试很有用。壳还为程序员提供了对数据流环境的可视性。
生成适用于小型平台的独立二进制可执行代码实现了物联网用例,其通常依赖于在各种小型设备上执行复杂计算。提供模拟数据流环境有助于开发人员解决代码中的错误,并与逻辑正确性测试协作,证明程序包正常运行。远程执行已编译的包,特别是当远程平台很小时,允许程序员快速迭代他的程序,在单个命令中编译和测试目标硬件上的程序,即使目标平台不是他正在其上进行开发的平台。
将语言从其词汇表示转换为中间符号表示(阶段1编译),然后将该中间表示转换为可由计算硬件执行的形式(阶段2编译)的过程。
Vel阶段1翻译工具遵循编译器常用的一般策略,具体为:(1)分析输入字符串以将其分解为令牌序列。(2)分析令牌序列以形成语法树。(3)识别树中的符号声明。(4)识别和解析树中的符号引用。(5)早期优化,例如常见的子表达式消除和常量折叠。(6)类型检查。(7)优化和符号成熟的附加阶段。8)符号的最终确定和中间表示的发出。
Vel阶段-1翻译器的一个显着特征是使用确定性有限自动机或DFA来执行函数应用所需的模式匹配并触发反应。阶段1翻译工具包括:(1)语法分析器,将输入语言转换为语法树。(2)词汇绑定组件,允许翻译中的程序进行自我引用,以便分析中的语言可以通过分析器(DSL或宏分析器的方式)进行修改。(3)语义分析算法,将绑定语法树翻译成代表数据流、模式、反应、函数表达式、定时器和输入/输出参数化的符号。(4)表达式转换器,它将表达式树转换成适合于或多或少直接转换成微处理器ALU指令的栈。(5)DFA生成器,用于将反应的模式和表达式转换为潜在的非最小DFA的中间集合。和(6)DFA组合和简化算法,用于从DFA的中间集合生成统一的、最小的DFA。
阶段1翻译工具的输出包括:(1)翻译中涉及的每个流的逻辑标识,使得每个流可以是多个流中的唯一指示对象。(2)每个流中数据流的描述,每个流向内(朝向反应;即,对外部源的订阅),向外(远离反应;即,到外部目的地的发布),向内和向外(发布/订阅对)或内部(仅用作其他反应的中间步骤,因此不作为发布或订阅表现)。(3)每个流中流动的数据类型的描述,每次用有限项描述,使得可以静态地检查被注入流中或从流中提取的数据的类型正确性。(4)描述DFA状态和转换的表的集合。(5)表达式栈的集合,描述在反应期间要执行的计算。(6)映射流输入到DFA输入的表。(7)将定时事件映射到DFA输入的表。(8)将DFA输出映射到动作对的表,每对包括对表达式栈和流输出的引用,从而指示DFA的输出将由给定表达式转换,然后推送到给定流。
Vel解释器和数据流模拟器直接使用阶段1翻译的输出。解释器在执行代码时模拟硬件平台,数据流模拟器模拟流数据环境,为Vel流提供输入和收集Vel流的输出。让我们将这两个任务称为指令解释和数据流仿真。
指令解释是专门编写编译器和解释器的计算机程序员很好理解的一类任务。该任务包括构造执行上下文,其中可以存储运行中变量的状态,然后一次一个地逐步执行程序的指令,从执行上下文访问数据并根据需要更新它。
在Vel的情况下,执行上下文还必须包括一组队列以在转换过程中保存数据流,并且包括表驱动的状态机引擎以执行由DFA描述的转换。队列由于Vel源中的声明而产生,其描述了数据的流动通道。其中一些是Vel程序的外部输入或输出,而其他是纯内部通道,描述输入和输出之间的中间状态。
数据流仿真包括提供对诸如文件或套接字之类的数据的外部源和接收器的访问,以及在这些外部系统和解释下的Vel程序之间交换数据所需的编程。这将包括注入器功能,它从外部源读取数据并将它们推送到表示程序输入的队列,以及提取器功能,它们从表示程序输出的队列中弹出数据并将它们写入外部接收器。
其中,根据本发明的Vel解释与规范的不同之处在于涉及DFA的方式。状态机引擎从队列中读取数据并使用它们来推进其DFA的状态。DFA表包含副作用的列,这些副作用在DFA通过其状态时执行。这些副作用调用指令解释来执行计算,其结果被推送到其他队列并且这触发其他DFA。
以这种方式,根据本发明的解释下的Vel程序首先由一组快速且小的状态机表示,并且在必要时仅回退到一般指令解释。这使得程序的执行效率高于仅由指令解释处理的程序。
Vel阶段-2翻译工具在很大程度上不是特定于Vel语言,而是特定于执行目标的平台。阶段2翻译器的Vel语言相关组件是:(1)阶段1产生的中间表示的初始摄取。(2)生成反应系统的阶段-2代码生成的整体组织。(3)提供运行时支持组件库,例如执行数据格式的外部编码和解码或实时时钟的内部调节的组件。
一种用于在多源多目的地数据流环境中创建用于实时处理数据流的程序的工具,包括:(1)识别多个潜在数据流。(2)识别与流中的数据模式相对应的一组反应函数和参数。(3)识别一组处理函数和参数,用于转换与声明的模式相匹配的数据。(4)识别比较数据流模式的一组定时事件,例如收集或丢弃数据的时间间隔或收集或丢弃数据之前或之后的特定时间点。(5)创建描述已识别的流、反应、函数和定时事件的数据流程序。(6)提供程序作为两阶段翻译工具的输入,包括阶段-1翻译工具和阶段-2翻译工具,阶段-1翻译工具包含用于将Vel程序语句翻译成相应DFA的DFA生成器,阶段-2翻译工具用于生成对应于翻译的Vel语句以供在平台上执行的特定于平台的硬件指令。(7)接收翻译工具各阶段的输出。
解释器组件可以使用阶段-1翻译工具的输出,包括:(1)在执行代码时模拟硬件平台的指令解释器。(2)数据流模拟器,它模拟流数据环境,为Vel流提供输入和收集Vel流的输出。
阶段-1翻译工具的输出可以用作阶段-2翻译工具的输入,包括:(1)硬件指令生成器,其将来自中间表示的指令翻译成适合于目标硬件平台的执行的形式。(2)程序组织模块,其将输出的生成指向适合用作数据流环境中的反应程序的形式。(3)执行所必需的运行支持组件库。阶段-2翻译工具的输出是适用于目标硬件平台的可执行程序。
图14示出了用于从输入创建虚拟传感器的Vel传感器表达式语言引擎1407。传感器表达式语言引擎从物理传感器或其他虚拟传感器获取输入。输入的一些示例包括入口压力1411、出口压力1414、温度1417和流量1420。任何数量的输入或输入的组合可以用作虚拟传感器的输入。基于输入,传感器表达式语言引擎可以生成具有输出的虚拟传感器,输出例如是压差1431、温度1434(可以开尔文为单位)和蒸汽压力1437。可以存在任何数量的虚拟传感器和输出。如上所述,输出可以是虚拟传感器输入的数学函数。
尽管图14示出了代表虚拟传感器的框(例如,1431、1434和1437)。虚拟传感器可以具有多个输出。例如,虚拟传感器1431和1434可以组合成具有两个输出的单个虚拟传感器。虚拟传感器1431、1434和1437可以组合成具有三个输出的单个虚拟传感器。
图14中的Vel传感器表达式语言引擎1407的内部可以通过下面描述的数据流编程来表征。给定一组用作输入的不同类型的数据流,以及希望通过数据流程序将这些输入转换成输出流,本发明是一种以协助模式匹配操作作为图的主要操作、并将模式匹配作为调用数据转换的主要机制的方式来实现数据流图的技术。
解决这类问题的需要通常出现在所有形式的数据流编程中。它适用于非常大规模的体系结构,例如企业数据中心内部和之间的数据流,以及非常小规模的体系结构,例如嵌入式设备中的事件流。
本发明适用于数据流编程的所有领域;然而,它最适合于能够检测到模式匹配并且应用处理函数的速度具有最高重要性的情况,以及用于执行的存储和计算资源有限的情况。
下面介绍了一些关于数据流编程的背景信息,并将作为下面关于模式驱动反应的讨论的基础。数据流编程将计算机程序建模为有向图,称为流图,每个外部节点指定程序的输入或输出,并且每个内部节点指定要执行的操作。流入每个节点的数据为其操作提供输入,其操作结果提供流出节点的数据。一对节点之间的有向边使得一个节点的输出成为另一个节点的输入。因此,数据进入图,通过各种操作在图内部流转,并以一些有用的方式退出图,所有这些都在连续的流中。
流图结构。图15显示了流图的示例。数据通过三个输入节点(in1 1506、in2 1509和in3 1512)进入图,在四个独立的操作节点(op1 1522、op2 1525、op3 1528和op4 1533)中进行转换,并通过两个输出节点(out1 1546和out2 1548)退出。边e1到e7表示允许数据流动的路径。
输入节点可以被称为注入器,输出节点可以被称为提取器。这些节点用于将图连接到外部数据系统;它们不以任何方式转换数据,尽管在某些实现中它们可以暂时缓冲数据。图15中的注入器和提取器用倒房屋形状的节点表示。
执行操作的内部节点被称为转换器。对于到达转换器的每个输入,转换器可以产生零个或多个输出。图15中的转换器用圆形节点表示。
发送输出的节点称为生产者,而接收输入数据的节点称为消费者。注入器是一种生产者,提取器是一种消费者。转换器既是生产者又是消费者。图16描绘了这种关系。
图16示出了各种节点的层次结构。注入器1608和转换器1613输入到生产者1619。转换器1613和提取器1622输入到消费者1625。生产者1619和消费者1625输入到节点1634。
每个生产者可以具有附加到其上的零个或多个传出边。每个传出边都将生成的数据带离生产者。每个消费者可以具有附加到其上的零个或多个传入边。每个传入边携带要消耗给消费者的数据。
每个唯一的边恰好将一个生产者连接到一个消费者;此外,对于任何给定的生产者和消费者对,最多只能有唯一一个边。换句话说,任何给定的生产者和消费者对要么通过唯一的边连接,要么不连接。
每个唯一的边是一种传出边,因为从边的生成者的角度来看,该边带走了已经产生的数据。每个唯一的边也是一种传入边,因为从边的消费者的角度来看,该边携带要消耗的数据。
图17示出了各种边及其对节点的势的层次结构。该图描绘了各种边以及它们与生产者和消费者的主要关系。生产者1708和唯一边1714输入到传出边1720。唯一边1714和消费者1723输入到传入边1726。传出边1720和传入边1726输入到边1735。
转换。如上所述,注入器和提取器不会改变其数据;数据的所有改变都由转换器完成。像函数应用程序一样,转换获取输入值,将它们转换为输出值;然而,与函数不同,转换可以获取多个输入值并保持它们,从而在以后产生零个或多个输出值。即使作为突发产生,转换的输出也单独进入输出流。
输入数据从一个或多个生产者到达转换器。每次新数据到达时,转换器都会激活,这意味着它有机会动作。所选择的动作可能是丢弃新数据、在内部缓冲它直到稍后、或者使用新数据以及任何先前缓冲的数据来产生一个或多个新输出。
例如,我们可以想象图15中的op1是消耗单个整数流作为输入(沿着边e1)并且产生整数流作为输出(沿着边e5)的转换器。让我们进一步想象op1的编程方式是它将在内部缓冲两个输入,然后,在第三个输入到达时,产生等于三个输入的平均值的输出。
迹线(1)示出了流图围绕op1的部分的动作的可能示例。输入数据于12:00开始到达,到12:05,op1已经看到三个输入,[12,16,5],其平均值为11。操作节点op1在12:05产生平均值作为其输出,同一时刻它收到了最后的输入。然后这个模式从12:06开始重复,并且op1在12:10产生另一个输出。以此类推。
除了通过其流入边到达的正式输入之外,转换器还可以以超时的形式声明非正式输入。超时是转换器在其激活之间希望到期的最长时间。如果在超时之前没有新输入到达,则转换器无论如何都将激活,除了处于表示它已超时的特殊状态中。以这种方式,转换器可以对数据的缺失以及其存在进行动作。每次转换器激活时,它都可以选择声明新的超时。
让我们修改op1的算法,说它有10分钟的超时。如果在那个时间没有到达三个值,op1将产生它具有的任何值的平均值。
迹线(2)示出了流图围绕新的时间感知op1的部分的动作的可能示例。输入数据在12:00开始到达,此时op1声明10分钟的超时。另一个输入在两分钟后于12:02到达,但在超时时间在12:10到期之前没有其他数据到达。在12:10,op1产生它所看到的两个输入的平均值,并声明没有进一步的超时。以此类推。
抽样与触发。当转换器有两个或多个输入时,有时会出现一些输入始终导致转换器产生输出,而其他输入永远不会导致其产生输出的情况。
例如,我们可以想象图14中的op4是消耗两个整数流作为输入(沿着边e5和e6)并且产生整数流作为输出(沿着边e7)的转换器。让我们进一步想象op4的编程方式是,每当输入沿e6到达时,op4将在内部存储输入的副本。通过这种方式,op4将始终知道e6中的最新值,但沿e6的值的到达不会导致op4产生任何东西。
此外,每当输入沿e5到达时,op4将沿e7产生输出,该输出等于输入和e6的最新值之和。迹线(3)显示了流图围绕op4的部分的动作的可能示例。
在12:00,op4看到值20沿e6到达。它将此缓存为e6的最新值。在12:05和12:10,值沿e5到达。在每种情况下,op4使用e5的实时值和e6的缓存值生成输出。在12:15,op4从e6缓存新的值(即30)并使用它在12:20产生输出,此时另一个输入沿e5到达。
在这个例子中,我们说op4正在对e6进行采样,但它是由e5触发的。采样是被动动作,涉及转换器内部数据积累,而触发则是利用新数据并累积数据以产生输出的动作。
有时,转换器将对其所有输入进行采样,并且仅在超时时触发。上述op1的时间感知版本是这种转换器的示例。
转换器也可以根本没有流入边并且仍然产生输出。这种转换器只是定时器,仅在超时时触发。这在一些需要按固定计划生成稳定数据系列的应用中非常有用。
没有触发条件的转换器是无用且错误的。
调度。只要接收输入或超时或两者,转换器就会激活。在每次激活时,转换器可以产生零个或多个输出。产生尚未被消费的输出的生产者将变为热;否则是冷。
由图引擎来决定选择处理热生产者的输出的技术。有两种常见的、同样有效的策略:生产者驱动和消费者驱动。
在生产者驱动的图中,生产者尽快激活。它产生的输出沿其输出边流转,并在其消费者处排队。这也称为推送模型,因为生产者在数据准备好后立即将数据推送给其消费者。在这个模型中,生产者在最短的时间内保持为热。
在消费者驱动的图中,生产者仅在其消费者准备好消费时才激活。它产生的输出不进行排队,因为消费者已经在等待它们。这也称为拉取模型,因为消费者从他们的生产者那里提取数据。在这个模型中,生产者可以无限期地保持为热。
请注意,数据流的方向在两种策略中都是相同的:从生产者到消费者。不同之处在于发起数据流的刺激所在的一方是生产者还是消费者。
实施数据流程序。可以用几乎任何编程语言实现数据流概念;但是,有些语言比其他语言更合适。
数据流程序通常用函数语言编写,例如Scala或Haskell,因为这些语言将程序建模为一系列数学表达式,无需副作用即可进行评估。
在以函数语言实现的图中,每个转换器的操作用表达式定义,并且每个节点的运行时动作仅仅是对其表达式的评估。免于副作用简化了执行模型,有助于确保节点重复且独立地操作。图优化也得到了简化,因为用于组合和简化表达式的代数也可以应用于图节点。
然而,在纯函数语言中,实现取决于所获得状态的转换可能是困难的。在这种情况下,Java或C++等命令式语言可能更为可取,因为这些语言将程序模型化为一系列指令,并允许副作用(如内部缓冲)。
在以命令语言实现的图中,每个转换器的操作由事件处理函数定义,该函数在每次输入到达时或在超时到期时或两者被调用。该函数可以自由地采取它认为合适的任何内部动作,并可以产生输出或声明超时,或两者兼而有之。这为实现者提供了极大的灵活性,但使图优化变得非常困难,因为很难从外部推断事件处理程序的动作。
无论语言如何,图的自动化框架(图引擎)及其节点的规范及其边的连接(图拓扑)通常使用代码库来处理。该库通常提供抽象,例如用于构造转换器的类,用于将转换器与边连接的方法,以及将图作为事件驱动系统运行的主循环。语言和库的灵活性定义了图中可表达的限制以及执行图的效率。
模式驱动的反应。本发明的中心概念是围绕模式匹配的任务组织转换器的动作。出于本讨论的目的,模式匹配器(或简称为“匹配器”)是一种算法,在给定一组语法和时间相关规则的情况下,可以将传入的数据承载事件流组织成常规数据结构。被称为定时前向最右(1)或TFR(1)模式匹配的技术是这种算法的示例。
逻辑编程。模式声明是逻辑编程的一种形式,是一种与命令式编程和函数式编程不同的模型。在逻辑编程中,声明了一个或多个自由变量,并给出了如何为它们分配值的规则。此外,定义了一个或多个依赖表达式,它们引用了自由变量。在运行时,自由变量根据规则获取值,然后评估依赖表达式。
在定义(4)中,b是自由变量,b+1是涉及b的依赖表达式。为b分配值的规则很简单:b假设按顺序取列表[1,2,3]中的值。执行后,a等于[2,3,4]。
模式规则。模式规则是逻辑表达式的一种形式,它声明在输入流中预期的模式。它看起来类似于λ表达式,但我们通过用小写π引入它来区分λ表达式。
在(5)中,模式p1按此顺序被声明为三个自由变量a,b和c。当应用于输入流时,每个自由变量都绑定到输入中的单个值,这意味着每个自由变量与应用模式的流的类型相同。应用模式的结果由箭头右侧的依赖表达式给出,在这种情况下等于三个输入的平均值。该模式实际上是(1)中所示的转换。
我们可以以将函数应用于值的方式将p1应用于流。例如,如果x是整数流,则p1(x)将是由x中的值按三个分组并取平均值所组成的新的整数流。p1(p1(x))将是平均值的平均值,依此类推。
在(6)中,我们将(5)修改为更短且更一般。我们不是单独列出三个输入(a,b,c),而是将它们作为单个输入d收集,该单个输入d为三个元素长。d匹配输入流中的三个值而不是一个。如果流的类型是T,那么d的类型将是list(T)。然后,我们借助内置函数sum计算平均值,该函数sum求列表的元素和。p2在功能上与p1相同。
在(7)中,我们修改(6)以引入具有超时的可变长度匹配的概念。现在d的长度作为间隔1..3给出,这意味着它将匹配输入中的一到三个值。d的类型将保持list(T);如果它最终仅匹配单个输入,则它将是一个元素的列表。匹配器将等待最多10分钟,最多可达到三个值,但如果时间到期,它将接受一个或两个值。现在,借助额外的内置函数len计算平均值,该函数返回列表中元素的数量。该模式实际上是(2)中所示的转换。
在(8)中,我们修改(7)以引入具有超的开放式匹配的概念。现在d的长度没有上限。它将匹配至少一个值,或在其10分钟窗口中尽可能多的值。该模式仅由超时触发。
在(9)中,我们修改(8)以引入没有超时的开放式匹配的概念。如在(8)中那样,d的长度没有上限,但现在没有任何东西会触发该模式。单独应用,这种模式将是错误的。它只在连接的上下文中有意义,这是后面部分的主题。
就流图而言,模式规则的每个应用定义具有单个输入的转换器。(如果模式有超时,则传感器也有超时。)转换器包含从模式规则派生的匹配器的定义。当输入值到达时,它将被提供给匹配器。当匹配器产生匹配时,匹配被用作参数来评估依赖表达式,其结果随后由转换器产生。
尚未满足的模式导致冷转换器,而完全满足的模式导致热转换器。然而,当部分满足可变长度的模式时,我们需要一个新的状态——温,来描述转换器。温转换器准备好产生输出,但不需要这样做。这与热转换器形成对比,热转换器已经准备好并且必须尽快生产。
考虑在(10)中定义的p6,其应用于由转换器表示的输入流。在任何输入到达之前,传感器将处于冷。在单个输入到达后,转换器将变温,因为其模式将部分满足。它最多可以再接受两个输入,或者它可以匹配它已有的输入。再过两次输入后,转换器就会变为热。如果不先生成输出,它就不能再接受任何输入。
用于转换器准备的3态(热、温、冷)代替2态(热、冷)模型是本发明的关键特征之一。它直接促进了模式动的反应。没有它,可变长度模式将无法使用。
连接。连接是将两个或更多个输入流连接在一起,这些输入流将一起评估以产生单个输出流。例如,如果我们在冰箱中有两个传感器,一个用于门,另一个用于温度,我们可以将两个流连接在一起,以在门关闭时产生平均温度。
表B
时间 | x | y | z1 |
12:00 | 11 | 22 | 33 |
12:05 | 12 | 34 | |
12:10 | 24 | 36 | |
12:15 | 13 | 26 | 39 |
请注意,当任一输入发生变化时,会产生输出;也就是说,评估是由其输入的变化触发的。
在(12)中,我们添加了额外的触发条件,即3分钟的超时时间。下表根据这种新的触发条件给出了x,y和z2的一些可能值。
表C
时间 | x | y | z2 |
12:00 | 11 | 22 | 33 |
12:03 | 33 | ||
12:05 | 12 | 34 | |
12:08 | 34 | ||
12:10 | 24 | 36 | |
12:13 | 36 | ||
12:15 | 13 | 26 | 39 |
请注意,超时间隔在每个值生成后重启,无论该值是由于超时还是由于输入的变化而产生的。出于触发的目的,超时被视为另一个输入。
在(13)中,我们示出了涉及(9)中定义的开放式模式p5的连接。(回想一下,p5收集1个或多个值,而没有上限)下表根据这个新的触发条件给出了x,y和z3的一些可能值。
表D
时间 | x | y | z3 |
12:00 | 11 | ||
12:05 | 12 | ||
12:08 | 13 | 0 | ([11,12,13],0) |
12:10 | 1 | ||
12:13 | 15 | ([15],1) | |
12:15 | 16 | 2 | ([16],2) |
请注意,输出生成永远不会被x触发,因为开放式模式p5本身不能触发任何内容。但是,y的变化可能会触发生产,并且在此过程中会导致p5关闭,假设它已收集至少一个值。从12:00到12:08,a从x收集值。在12:08,y的变化导致集合关闭并产生输出。在12:10,没有产生输出,因为虽然y有变化,但是集合a是空的。然而,在此后的第一次机会(12:13),已经提供给a一个值,产生了另一个输出。以此类推。
在(11)、(12)和(13)中,表达式a in x,b in y,a in p5(x),以及every 2(min)是触发表达式的示例。它们定义了依赖表达式的评估条件。
触发表达式的值是热、温或冷。在触发表达式与输入流相关联的情况下,该值反映了流的生成者的准备情况。在触发表达式与时钟绑定的情况下,当超时到期时值为热,否则为冷。(基于时间的触发表达式永远不会为温。)
可以将两个触发表达式与逻辑或运算符组合,从而产生新的触发表达式。组合触发表达式的新值由其左侧和右侧操作数确定,如下面的真值表中所定义。
表E
左侧 | 右侧 | 输出 |
冷 | 冷 | 冷 |
冷 | 温 | 温 |
冷 | 热 | 热 |
温 | 冷 | 温 |
温 | 温 | 温 |
温 | 热 | 热 |
热 | 冷 | 热 |
热 | 温 | 热 |
热 | 热 | 热 |
两个触发表达式也可以与逻辑和运算符组合,产生新的触发表达式。组合触发表达式的新值由其左侧和右侧操作数确定,如下面的真值表所示。
表F
左侧 | 右侧 | 输出 |
冷 | 冷 | 冷 |
冷 | 温 | 冷 |
冷 | 热 | 冷 |
温 | 冷 | 冷 |
温 | 温 | 温 |
温 | 热 | 热 |
热 | 冷 | 冷 |
热 | 温 | 热 |
热 | 热 | 热 |
就流图而言,模式规则的每个应用定义具有两个或更多输入的转换器。(如果模式的连接具有超时,则转换器也具有超时。)转换器包含依赖表达式和触发表达式的定义。
当连接的触发表达式变为热时,使所有尚未关闭的输入模式关闭并且评估依赖表达式。
当连接的触发表达变为温时,转换器向其每个生成器发送消息,请求生成器加速。
加速转换器将尽可能快地关闭其匹配。如果已经为温,它将变为热。如果为冷,它会尽早变为热,绕过任何可能的中间温状态。一旦产生输出,转换器将自动减速,恢复其正常行为,直到再次加速。
尽管可能,但加速注入器的行为与未加速注入器的行为没有区别。它在下次注入值时减速。
请注意,加速生产者产生的输出被发送给所有它的消费者,而不仅仅是那些要求加速的消费者。这样可以保持所有观察者的数据流一致。
消费者加速生产者的能力是本发明的关键特征之一。它直接促进了模式驱动的反应。没有它,开放式模式将无法使用。
过滤。触发连接并评估其依赖表达式后,它可能不会产生输出。可选的过滤器可以抑制不期望的结果。
在(14)中,我们看到过滤器的示例。关键字if后面的表达式必须求值为真(true)才能生成依赖表达式的值作为输出。
过滤器的概念不会改变流图的结构。它仅仅是转换器触发后的额外步骤。然而,值得注意的是,如果没有模式匹配,转换器的每次激活都需要评估这样的表达式,因为激活(输入的到达)和触发(满足评估的前提条件)之间没有区别。
表达式评估通常远远低效于模式匹配。精心设计的模式匹配算法将在每次匹配时仅考虑每个输入一次,而表达式可能需要在满足条件之前多次重复评估每个输入。因此,纯粹基于表达式的转换器可能花费更多的时间来决定是否产生输出而不是一定产生输出。
激活触发之间的区别是本发明的关键特征之一。它所带来的性能增强是模式驱动方法的主要优点之一。
采样。如前所述,每个非错误传转换器必须具有某种形式的触发器,并且模式驱动和连接转换器以声明方式定义其触发器。也可以声明采用采样的转换器。
出于(15)的目的,我们假设x和y都是整数流。此处定义的转换器由x触发但仅采样y。这是因为x出现在触发表达式中,但y仅出现在依赖表达式中。由于y是整数流,因此其类型为sequence(int),并且前缀运算符latest指的是在评估表达式时此序列中的最前面的值。
就流图而言,转换器具有两个输入:一个来自x,一个来自y。但是,当输入从y到达时,该值仅由转换器缓存。来自x的输入的到达将触发依赖表达式的评估,该表达式将使用y的缓存值。
在触发转换器的输入和转换器仅仅采样的输入之间进行声明性区分的能力是本发明的关键特征之一。它允许转换器的定义保持纯声明,即使转换器正在执行操作,如样本缓存,这涉及副作用。
函数逻辑优化。到目前为止,我们已经看到逻辑编程(模式匹配和连接)与函数编程(依赖和过滤表达式)的组合可以以纯粹的声明方式表达大范围的转换。组合风格——函数逻辑编程——具有函数编程的许多优点,同时减轻了许多限制和复杂性。它可以表达大多数现实世界的意图,而无需诉诸命令式编程。
可以以优化函数程序的相同方式来优化函数逻辑程序中的函数表达式。这种优化可以将长链的生产者和消费者混合成一个单一的转换器,使图同时更小、更快地执行。
此外,表示为规则的逻辑模式可以组合成统一的状态机。此优化的确切性质取决于使用的匹配算法。例如,在TFR(1)的情况下,可以组合应用于单个源的所有模式以形成单个状态机,从而保证仅对流的所有输入进行一次评估。
函数逻辑声明表达了大多数使用数据流编程的有用程序,同时保留广泛的优化机会的能力是本发明的关键特征之一。它允许简洁声明的程序产生更小、更快的流图。
在一种实现中,一种系统包括:多个代理,每个代理连接到传感器,其中每个代理从传感器接收数据(例如,流数据);数据处理组件包括连接到代理的数据总线,其中数据处理组件通过形成一系列互连的转换将输入流转换成输出流。每个转换可以包括一个或多个输入,每个输入给定至少一个外部数据源或转换器作为参考;一个或多个输出,每个输出给定至少一个外部数据接收器或转换器作为参考,以及对于每个输入,应用于输入的模式,以过滤、收集和组织原始输入为更有用、部分处理的形式,并移除错误的输入。
该至少一个代理包括:输入队列,具有计算机存储器中的第一存储器位置,其中输入队列在第一存储器位置中存储要处理的令牌的先进先出序列和与队列中的每个令牌相关联的、指示关联令牌进入输入队列的时间的时间戳,并且令牌由输入队列通过网络接收。驱动程序组件,连接到输入队列,其中驱动程序组件处理输入队列中的令牌而不回溯,并识别与一个或多个预定输入模式匹配的令牌序列中的模式,并且在识别匹配的预定输入模式时,生成传出事件输出。输出队列,连接到驱动器组件,包括计算机存储器中的第二存储器位置,其中输出队列在第二存储器位置中存储由驱动器组件生成的输出事件的先进先出序列。状态表组件,连接到驱动器组件,其中状态表组件以状态表格式存储预定输入模式。状态栈组件,连接到驱动器组件,具有计算机存储器中的第三存储器位置,其中状态栈组件在第三存储器位置中存储帧的后进先出顺序存储。帧包括翻译状态号、符号和截止日期。
每个转换可以包括用于确定何时评估过滤表达式的触发表达式。触发表达式被定义为节点树,并且每个节点是对其中一个输入的引用中的至少一个;超时,以时间单位的时间间隔给出;二进制连接运算符,包括至少两个子节点,每个子节点由另一个触发表达式节点表示;以及二进制分离运算符,其包括至少两个子节点,每个子节点由另一个触发表达式节点表示。
每个转换可以包括过滤表达式,其中过滤表达式在匹配输入的域中指定,并且过滤表达式产生布尔结果,其确定转换将何时产生输出。输入模式可以匹配可变长度的输入序列,包括零长度或无限(或无限长)长度。
尝试将输入模式与输入序列匹配的结果可以具有至少三种不同的状态或完全程度。尝试将输入模式与输入序列匹配的结果可以具有至少三种不同的状态。三种不同的状态可以包括:在匹配输入模式的最小输入之前,匹配的尝试将处于第一状态;在匹配最小输入之后并且在匹配最大输入之前,匹配的尝试将处于第二状态;并且在匹配最大输入之后,匹配的尝试将处于第三状态。第一状态可以称为“冷”状态。第二状态可以称为“温”状态。第三状态被称为“热”状态。
数据流可以基于从传感器到代理的推送。当代理的所有输入至少处于第二状态并且传感器的一个或多个输入处于第三状态并且触发表达式的结果处于第二状态时,数据流可以改变为基于由代理从传感器拉取。代理可以加速处于第二状态的传感器,从而迫使每个这样的传感器认为其模式完全匹配,从而变为第三状态并产生其输出。这高效地允许代理从其传感器中提取数据。
允许在转换中有效地使用绝对长或开放的模式。一个或多个传感器可以是将物理属性转换为数字量的硬件设备。数字量以流式传输。
在另一实现中,一种方法包括:互连多个代理和传感器,其中代理连接到传感器并从传感器接收数据流;以及通过一系列互连的转换将来自传感器的输入流转换成输出流。每个转换包括:一个或多个输入,每个输入给定外部数据源或转换器作为参考;一个或多个输出,每个输出给定外部数据接收器或转换器作为参考;对于每个输入,应用于该输入的模式,以过滤、收集和组织原始输入为更有用、部分处理或匹配的形式,并移除错误的输入;以及触发表达式,用于确定何时评估过滤表达式,并定义为节点树。
每个节点是以下中的至少一个:对一个输入的引用;超时,以某个方便的时间单位表示的时间间隔给出;二进制连接运算符,包括两个子节点,每个子节点是另一个触发表达式节点;或二进制分离运算符,它包括两个子节点,每个子节点是另一个触发表达式节点。可以存在过滤表达式,在匹配的输入的域中定义并产生布尔结果,其确定转换何时将产生输出。可以在匹配的输入的域中定义一个或多个表达式,并产生转换的输出的任何类型组合的结果。
输入模式可以匹配可变长度的输入序列,包括零长度或无限长度,在其最小输入已经匹配之前被认为是冷状态,在其最小输入已经匹配之后并且在其最大输入匹配之前被认为是温状态,在最大输入匹配后被视为热状态。转换器对于匹配准备的完全性模型的特征在于至少三个不同的程度,而不是两个或更少的不同程度。三程度完全性模型直接促进模式驱动的反应,以允许处理可变长度模式。
从生产者到消费者的数据流基于推送,除非代理的所有输入至少处于温状态并且当传感器的一个或多个输入处于热状态时,并且触发表达式的结果处于温状态。然后,代理可以加速其温传感器,迫使每个这样的传感器认为其模式完全匹配,从而变为热状态并产生其输出。这有效地允许传感器拉取其连接的其他生产者的数据。这允许绝对长或开放式模式有效地用于转换。
已经出于说明和描述的目的呈现了本发明的描述。其并非旨在穷举或将本发明限制于所描述的精确形式,并且鉴于上述教导,许多修改和变化是可能的。选择和描述实施例是为了最好地解释本发明的原理及其实际应用。该描述将使得本领域的其他技术人员能够在各种实施例中以及适合于特定用途的各种修改中最好地利用和实践本发明。本发明的范围由以下权利要求限定。
Claims (27)
1.一种系统,包括:
多个代理,每个代理耦合到传感器,其中每个代理接收来自传感器的数据;
数据总线,所述数据总线耦合到所述多个代理;以及
数据处理器,所述数据处理器耦合到所述数据总线,其中所述数据处理器通过形成一系列互连的转换将输入流转换成输出流,每个转换包括:
一个或多个输入,每个输入被给定作为外部数据源或转换器中的至少一个的参考,
一个或多个输出,每个输出被给定作为外部数据接收器或转换器中的至少一个的参考,以及
对于每个输入,要应用于该输入的模式,以过滤、收集和组织原始输入为更有用的、部分处理的形式,以及移除错误的输入,
其中至少一个代理包括:
输入队列,所述输入队列包括计算机存储器中的第一存储器位置,其中输入队列在所述第一存储器位置中存储要处理的令牌的先进先出序列,以及与所述队列中的每个令牌相关联的时间戳,该时间戳指示相关联的令牌进入所述输入队列的时间,并且所述令牌由所述输入队列通过网络接收;
驱动器,所述驱动器被耦合到所述输入队列,其中所述驱动器以不回溯的方式处理所述输入队列中的令牌,并识别与一个或多个预定输入模式匹配的令牌序列中的模式,并且在识别到匹配的预定输入模式时,生成传出事件输出;
输出队列,所述输出队列被耦合到所述驱动器,包括所述计算机存储器中的第二存储器位置,其中所述输出队列在所述第二存储器位置中存储由所述驱动器生成的所述输出事件的先进先出序列;
状态表,所述状态表被耦合到所述驱动器,其中所述状态表以状态表格式存储所述预定输入模式;以及
状态栈,所述状态栈被耦合到所述驱动器,包括所述计算机存储器中的第三存储器位置,其中所述状态栈在所述第三存储器位置中存储帧的后进先出顺序存储,并且帧包括转换状态号、符号和截止日期。
2.如权利要求1所述的系统,其中尝试将输入模式与输入序列匹配的结果具有至少三种不同的状态,所述至少三种不同的状态包括:
在所述输入模式的最小输入匹配之前,所述结果将处于第一状态,
在匹配所述最小输入之后并且在匹配最大输入之前,所述结果将处于第二状态,
在匹配所述最大输入之后,所述结果将处于第三状态。
3.如权利要求2所述的系统,其中所述第一状态被称为“冷”状态,所述第二状态被称为“温”状态,并且所述第三状态被称为“热”状态。
4.如权利要求2所述的系统,其中数据流动是基于推送的方式从传感器流向代理的,并且当代理的所有输入至少处于所述第二状态时,所述数据流动变为由代理基于拉取的方式从传感器流动。
5.如权利要求2所述的系统,其中数据流动是基于推送的方式从传感器流向代理的,并且当所述传感器的一个或多个输入处于所述第三状态时,所述数据流动变为由代理基于拉取的方式从传感器流动。
6.如权利要求2所述的系统,其中数据流动是基于推送的方式从传感器流向代理的,并且当代理的所有输入至少处于所述第二状态时且当所述传感器的一个或多个输入处于所述第三状态时,所述数据流动变为由代理基于拉取的方式从传感器流动。
7.如权利要求6所述的系统,其中触发表达式的结果处于所述第二状态。
8.如权利要求2所述的系统,其中代理加速其处于所述第二状态的传感器,从而迫使每个这样的传感器认为其模式完全匹配并因此变为处于所述第三状态并产生其输出,从而有效地允许代理从其传感器中提取数据。
9.如权利要求1所述的系统,其中每个转换包括触发表达式,其用于确定何时评估过滤表达式。
10.如权利要求1所述的系统,其中所述触发表达式被定义为节点树,并且每个节点是以下各项中的至少一个:
对所述输入中的一个输入的引用,
超时,以单位时间的时间间隔给出,
二进制连接运算符,包括至少两个子节点,每个子节点由另一个触发表达式节点表示,以及
二进制分离运算符,包括至少两个子节点,每个子节点由另一个触发表达式节点表示。
11.如权利要求9所述的系统,其中每个转换包括过滤表达式,其中所述过滤表达式在匹配输入的域中指定,并且所述过滤表达式产生布尔结果,所述布尔结果确定转换何时将产生输出。
12.如权利要求1所述的系统,其中输入模式匹配可变长度的输入序列,所述可变长度包括零长度或无限长度。
13.如权利要求1所述的系统,其中允许绝对长或开放式模式有效地用于转换。
14.如权利要求1所述的系统,其中,所述传感器中的至少一个是将物理属性转换为流式传输的数字量的硬件设备。
15.一种方法,包括:
互连多个代理和传感器,其中所述代理被耦合到所述传感器并从所述传感器接收数据流;
通过一系列互连的转换将来自所述传感器的输入流转换成输出流,其中每个转换包括:
一个或多个输入,每个输入被给定作为外部数据源或转换器的参考,
一个或多个输出,每个输出被给定作为外部数据接收器或转换器的参考,
对于每个输入,要应用于该输入的模式,以过滤、收集和组织原始输入为更有用、部分处理或匹配的形式,并移除错误的输入,
触发表达式,用于确定何时评估过滤表达式,并定义为节点树,其中每个节点是以下各项中的至少一个:
对所述输入中的一个输入的引用,
超时,作为以某个方便的时间单位表征的时间间隔给出,
二进制连接运算符,包括两个子节点,每个子节点是另一个触发表达式节点,或
二进制分离运算符,包括两个子节点,每个子节点是另一个触发表达式节点,
过滤表达式,在匹配输入的域中定义并产生布尔结果,该结果确定转换何时产生输出,以及
在匹配输入的域中定义的并引起产生转换输出的任何类型组合的结果的一个或多个表达式。
16.如权利要求15所述的方法,其中至少一个代理包括:
输入队列,所述输入队列包括计算机存储器中的第一存储器位置,其中输入队列在所述第一存储器位置中存储要处理的令牌的先进先出序列,以及与所述队列中的每个令牌相关联的时间戳,该时间戳指示相关联的令牌进入所述输入队列的时间,并且所述令牌由所述输入队列通过网络接收;
驱动器,所述驱动器被耦合到所述输入队列,其中所述驱动器以不回溯的方式处理所述输入队列中的令牌,并识别与一个或多个预定输入模式匹配的令牌序列中的模式,并且在识别到匹配的预定输入模式时,生成传出事件输出;
输出队列,所述输出队列被耦合到所述驱动器,包括所述计算机存储器中的第二存储器位置,其中所述输出队列在所述第二存储器位置中存储由所述驱动器生成的所述输出事件的先进先出序列;
状态表,所述状态表被耦合到所述驱动器,其中所述状态表以状态表格式存储所述预定输入模式;以及
状态栈,所述状态栈被耦合到所述驱动器,包括所述计算机存储器中的第三存储器位置,其中所述状态栈在所述第三存储器位置中存储帧的后进先出顺序存储,并且帧包括转换状态号、符号和截止日期。
17.如权利要求15所述的方法,其中尝试将输入模式与输入序列匹配的结果具有至少三种不同的状态,所述至少三种不同的状态包括:
在所述输入模式的最小输入匹配之前,所述结果将处于第一状态,
在匹配所述最小输入之后并且在匹配最大输入之前,所述结果将处于第二状态,
在匹配所述最大输入之后,所述结果将处于第三状态。
18.如权利要求17所述的方法,其中数据流动是基于推送的方式从传感器流向代理的,并且当代理的所有输入至少处于所述第二状态时,所述数据流动变为由代理基于拉取的方式从传感器流动。
19.如权利要求17所述的方法,其中数据流动是基于推送的方式从传感器流向代理的,并且当所述传感器的一个或多个输入处于所述第三状态时,所述数据流动变为由代理基于拉取的方式从传感器流动。
20.如权利要求17所述的方法,其中数据流动是基于推送的方式从传感器流向代理的,并且当代理的所有输入至少处于所述第二状态时且当所述传感器的一个或多个输入处于所述第三状态时,所述数据流动变为由代理基于拉取的方式从传感器流动。
21.如权利要求20所述的方法,其中触发表达式的结果处于所述第二状态。
22.如权利要求17所述的方法,其中代理加速其处于所述第二状态的传感器,从而迫使每个这样的传感器认为其模式完全匹配并因此变为处于所述第三状态并产生其输出,从而有效地允许代理从其传感器中提取数据。
23.如权利要求15所述的方法,其中输入模式
匹配可变长度的输入序列,所述可变长度包括零长度或无限长度,
在其最小输入匹配之前被认为是冷状态,
在其最小输入匹配之后并且在其最大输入匹配之前被认为是温状态,并且
在其最大输入匹配后被认为是热状态。
24.如权利要求15所述的方法,其中转换器的匹配准备的完全性模型的特征在于至少三个不同的程度,而不是两个或更少的不同程度。
25.如权利要求24所述的方法,其中三程度完全性模型直接促进模式驱动的反应,以允许处理可变长度模式。
26.如权利要求23所述的方法,其中从生产者到消费者的数据流基于推送,除了:
当代理的所有输入至少处于温状态以及当所述传感器的一个或多个输入处于热状态,并且触发表达式的结果处于温状态时,
然后所述代理加速其温传感器,迫使每个这样的传感器认为其模式完全匹配,从而变为热状态并产生其输出,
从而有效地允许所述传感器从与其连接的其他生产者拉取数据,以及因此,允许绝对长或开放式模式有效地用于转换。
27.一种方法,包括:
互连多个代理和传感器,其中所述代理被耦合到所述传感器并从所述传感器接收数据流;
通过一系列互连的转换将来自所述传感器的输入流转换成输出流,其中每个转换包括:
一个或多个输入,每个输入被给定作为外部数据源或转换器的参考,
一个或多个输出,每个输出被给定作为外部数据接收器或转换器的参考,
对于每个输入,要应用于该输入的模式,以过滤、收集和组织原始输入为更有用、部分处理或匹配的形式,并移除错误的输入,
触发表达式,用于确定何时评估过滤表达式,并定义为节点树,其中每个节点是以下各项中的至少一个:
对所述输入中的一个输入的引用,
超时,作为以某个方便的时间单位表征的时间间隔给出,
二进制连接运算符,包括两个子节点,每个子节点是另一个触发表达式节点,或
二进制分离运算符,包括两个子节点,每个子节点是另一个触发表达式节点,
过滤表达式,在匹配输入的域中定义并产生布尔结果,该结果确定转换何时产生输出,以及
在匹配输入的域中定义的并引起产生转换输出的任何类型组合的结果的一个或多个表达式,
其中尝试将输入模式与输入序列匹配的结果具有至少三种不同的状态,所述至少三种不同的状态包括:
在所述输入模式的最小输入匹配之前,所述结果将处于第一状态,
在匹配所述最小输入之后并且在匹配最大输入之前,所述结果将处于第二状态,
在匹配所述最大输入之后,所述结果将处于第三状态,并且
至少一个代理加速其处于所述第二状态的传感器,从而迫使每个这样的传感器认为其模式完全匹配并因此变为处于所述第三状态并产生其输出,从而有效地允许代理从其传感器中提取数据。
Applications Claiming Priority (10)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662312223P | 2016-03-23 | 2016-03-23 | |
US201662312187P | 2016-03-23 | 2016-03-23 | |
US201662312255P | 2016-03-23 | 2016-03-23 | |
US201662312106P | 2016-03-23 | 2016-03-23 | |
US62/312,255 | 2016-03-23 | ||
US62/312,187 | 2016-03-23 | ||
US62/312,106 | 2016-03-23 | ||
US62/312,223 | 2016-03-23 | ||
CN201780019786.3A CN108885580B (zh) | 2016-03-23 | 2017-03-23 | 实时数据流编程中模式驱动反应的组合 |
PCT/US2017/023911 WO2017165712A1 (en) | 2016-03-23 | 2017-03-23 | Composition of pattern-driven reactions in real-time dataflow programming |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780019786.3A Division CN108885580B (zh) | 2016-03-23 | 2017-03-23 | 实时数据流编程中模式驱动反应的组合 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115373977A true CN115373977A (zh) | 2022-11-22 |
Family
ID=59897282
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210437492.5A Pending CN115373977A (zh) | 2016-03-23 | 2017-03-23 | 实时数据流编程中模式驱动反应的组合 |
CN201780019786.3A Active CN108885580B (zh) | 2016-03-23 | 2017-03-23 | 实时数据流编程中模式驱动反应的组合 |
CN201780019779.3A Active CN108885545B (zh) | 2016-03-23 | 2017-03-23 | 用于实时数据流编程语言的工具和方法 |
CN201780019780.6A Active CN108885632B (zh) | 2016-03-23 | 2017-03-23 | 用于实时数据流编程的高效状态机 |
CN202211226634.XA Pending CN115629829A (zh) | 2016-03-23 | 2017-03-23 | 用于实时数据流编程的高效状态机 |
Family Applications After (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780019786.3A Active CN108885580B (zh) | 2016-03-23 | 2017-03-23 | 实时数据流编程中模式驱动反应的组合 |
CN201780019779.3A Active CN108885545B (zh) | 2016-03-23 | 2017-03-23 | 用于实时数据流编程语言的工具和方法 |
CN201780019780.6A Active CN108885632B (zh) | 2016-03-23 | 2017-03-23 | 用于实时数据流编程的高效状态机 |
CN202211226634.XA Pending CN115629829A (zh) | 2016-03-23 | 2017-03-23 | 用于实时数据流编程的高效状态机 |
Country Status (8)
Country | Link |
---|---|
US (11) | US10564941B2 (zh) |
EP (3) | EP3433768A4 (zh) |
JP (5) | JP2019516167A (zh) |
KR (3) | KR102092721B1 (zh) |
CN (5) | CN115373977A (zh) |
AU (4) | AU2017238633B2 (zh) |
SA (2) | SA518400086B1 (zh) |
WO (3) | WO2017165713A1 (zh) |
Families Citing this family (125)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10140191B2 (en) * | 2015-07-24 | 2018-11-27 | Accenture Global Services Limited | System for development of IoT system architecture |
US10324773B2 (en) * | 2015-09-17 | 2019-06-18 | Salesforce.Com, Inc. | Processing events generated by internet of things (IoT) |
KR102092721B1 (ko) * | 2016-03-23 | 2020-04-23 | 포그혼 시스템스 인코포레이티드 | 실시간 데이터플로우 프로그래밍에서 패턴 구동형 반응의 구성 |
US10110563B1 (en) * | 2016-04-28 | 2018-10-23 | Palo Alto Networks, Inc. | Reduction and acceleration of a deterministic finite automaton |
US10908886B2 (en) * | 2016-07-12 | 2021-02-02 | Oracle International Corporation | Accessing a migrated member in an updated type |
CN108713205B (zh) | 2016-08-22 | 2022-11-11 | 甲骨文国际公司 | 用于自动映射与数据流环境一起使用的数据类型的系统和方法 |
US20180069925A1 (en) * | 2016-09-08 | 2018-03-08 | BigStream Solutions, Inc. | Systems and methods for automatic transferring of big data computations from centralized systems to at least one of messaging systems and data collection systems |
US10055339B2 (en) * | 2016-09-28 | 2018-08-21 | Wipro Limited | Methods and systems for testing mobile applications |
US10025566B1 (en) * | 2016-10-07 | 2018-07-17 | The Mathworks, Inc. | Scheduling technique to transform dataflow graph into efficient schedule |
US11323519B2 (en) * | 2017-04-19 | 2022-05-03 | Microsoft Technology Licensing, Llc | Internet of things pub-sub data publisher |
GB201706300D0 (en) * | 2017-04-20 | 2017-06-07 | Microsoft Technology Licensing Llc | Debugging tool |
US11537368B2 (en) * | 2017-06-03 | 2022-12-27 | Apple Inc. | Integrating machine learning models into an interpreted software development environment |
US10387129B2 (en) * | 2017-06-29 | 2019-08-20 | General Electric Company | Deployment of environment-agnostic services |
US10872149B1 (en) | 2017-07-25 | 2020-12-22 | Perspecta Labs Inc. | Anomaly detection based on side-channel emanations |
US10452624B2 (en) * | 2017-08-02 | 2019-10-22 | Vmware, Inc. | Storage and analysis of data records associated with managed devices in a device management platform |
US10545742B2 (en) * | 2017-09-06 | 2020-01-28 | Nicira, Inc. | Annotation-driven framework for generating state machine updates |
CN111279319A (zh) | 2017-09-30 | 2020-06-12 | 甲骨文国际公司 | 容器组的动态迁移 |
US11113608B2 (en) | 2017-10-30 | 2021-09-07 | Accenture Global Solutions Limited | Hybrid bot framework for enterprises |
US11397663B2 (en) * | 2017-11-02 | 2022-07-26 | Silicon Mobility Sas | Software environment for control engine debug, test, calibration and tuning |
US10310959B2 (en) | 2017-11-07 | 2019-06-04 | Bank Of America Corporation | Pre-deployment validation system using intelligent databases |
RO133453A2 (ro) * | 2017-12-28 | 2019-06-28 | Siemens Aktiengesellschaft | Motor de procesare a semnalelor şi evenimentelor |
US11012416B2 (en) * | 2018-01-15 | 2021-05-18 | Akamai Technologies, Inc. | Symbolic execution for web application firewall performance |
CN108400917B (zh) * | 2018-01-22 | 2021-05-18 | 深圳市新科聚合网络技术有限公司 | 一种面向智能制造的边缘计算网关及系统 |
CN110347396B (zh) * | 2018-04-03 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 系统构建方法、控制方法、装置、控制系统及计算设备 |
US20210041859A1 (en) * | 2018-04-13 | 2021-02-11 | Mitsubishi Electric Corporation | Data processing device, data processing method and program |
US10986183B2 (en) * | 2018-05-02 | 2021-04-20 | Hewlett Packard Enterprise Development Lp | Data management in a network environment |
US11388222B2 (en) * | 2018-05-04 | 2022-07-12 | Verizon Patent And Licensing Inc. | Mobile edge computing |
US11226797B2 (en) * | 2018-05-24 | 2022-01-18 | Chaldal, Inc. | Representation and analysis of workflows using abstract syntax trees |
EP3579174A1 (en) | 2018-06-08 | 2019-12-11 | Hexagon Technology Center GmbH | Mobile vehicles in manufacturing |
US11275485B2 (en) * | 2018-06-15 | 2022-03-15 | Sap Se | Data processing pipeline engine |
US10666557B2 (en) * | 2018-08-03 | 2020-05-26 | Hitachi, Ltd. | Method to manage data flow for edge-core distributed analytics systems |
CN109150703B (zh) * | 2018-08-23 | 2019-07-02 | 北方工业大学 | 一种工业物联网智能云网关及其通信方法 |
WO2020043538A1 (en) * | 2018-08-28 | 2020-03-05 | Koninklijke Philips N.V. | A distributed edge-environment computing platform for context-enabled ambient intelligence, environmental monitoring and control, and large-scale near real-time informatics |
US11228481B2 (en) * | 2018-08-29 | 2022-01-18 | Fathym, Inc. | Method for communicating and debugging across IoT systems |
WO2020041872A1 (en) * | 2018-08-30 | 2020-03-05 | Streamworx.Ai Inc. | Systems, methods and computer program products for scalable, low-latency processing of streaming data |
US11252258B2 (en) * | 2018-09-27 | 2022-02-15 | Hewlett Packard Enterprise Development Lp | Device-aware dynamic protocol adaptation in a software-defined network |
DE102019124215A1 (de) * | 2018-09-28 | 2020-04-02 | Dspace Digital Signal Processing And Control Engineering Gmbh | Verfahren zum Ändern von Modellen für die Erzeugung von Quellcode |
US20200117576A1 (en) * | 2018-10-12 | 2020-04-16 | Ca, Inc. | Assessing the container-readiness of software applications |
US11960261B2 (en) | 2019-07-12 | 2024-04-16 | Johnson Controls Tyco IP Holdings LLP | HVAC system with sustainability and emissions controls |
CN109299380B (zh) * | 2018-10-30 | 2021-07-02 | 浙江工商大学 | 在线教育平台中基于多维特征的习题个性化推荐方法 |
CN109471401B (zh) * | 2018-11-08 | 2021-02-26 | 金蝶软件(中国)有限公司 | 数据处理方法以及边缘计算数据盒 |
US11727021B2 (en) * | 2018-12-14 | 2023-08-15 | Tibco Software Inc. | Process control tool for processing big and wide data |
WO2020145892A1 (en) * | 2019-01-10 | 2020-07-16 | Fractal Cognitives Pte. Ltd. | Natural solution language |
US11761660B2 (en) | 2019-01-30 | 2023-09-19 | Johnson Controls Tyco IP Holdings LLP | Building control system with feedback and feedforward total energy flow compensation |
US11150926B2 (en) * | 2019-02-22 | 2021-10-19 | International Business Machines Corporation | Native code generation for cloud services |
US11790263B2 (en) | 2019-02-25 | 2023-10-17 | International Business Machines Corporation | Program synthesis using annotations based on enumeration patterns |
KR102188562B1 (ko) * | 2019-02-28 | 2020-12-09 | 숙명여자대학교산학협력단 | 시각 블록 언어 기반 IoT 응용 프로그램 개발 도구 및 그 동작 방법 |
ES2784865A1 (es) * | 2019-03-26 | 2020-10-01 | Ind Internet Of Robots S L U | Sistema de monitorizacion de maquinaria industrial y metodo para llevar a cabo dicha monitorizacion |
US11616839B2 (en) | 2019-04-09 | 2023-03-28 | Johnson Controls Tyco IP Holdings LLP | Intelligent edge computing platform with machine learning capability |
US10951387B2 (en) * | 2019-04-22 | 2021-03-16 | Pinnacle Peak Holding Corporation | Systems and methods for self-formation and self-management of full-duplex communication networks |
US11714393B2 (en) | 2019-07-12 | 2023-08-01 | Johnson Controls Tyco IP Holdings LLP | Building control system with load curtailment optimization |
US11274842B2 (en) | 2019-07-12 | 2022-03-15 | Johnson Controls Tyco IP Holdings LLP | Systems and methods for optimizing ventilation, filtration, and conditioning schemes for buildings |
US11074081B2 (en) * | 2019-08-02 | 2021-07-27 | GM Global Technology Operations LLC | Architecture and method supporting multiple vision stream using shared server on embedded platform |
US20210034031A1 (en) * | 2019-08-02 | 2021-02-04 | Hitachi, Ltd. | Using ai for ensuring data integrity of industrial controllers |
US10691728B1 (en) * | 2019-08-13 | 2020-06-23 | Datadog, Inc. | Transforming a data stream into structured data |
TWI720580B (zh) * | 2019-08-14 | 2021-03-01 | 樂澄資訊顧問有限公司 | 視覺模組化程式系統 |
US11121905B2 (en) | 2019-08-15 | 2021-09-14 | Forcepoint Llc | Managing data schema differences by path deterministic finite automata |
US20230059793A1 (en) * | 2019-08-29 | 2023-02-23 | Unilog Content Solutions, Llc | System and method for non-programmatically constructing software solutions on configurable computing platform |
WO2021050816A1 (en) * | 2019-09-12 | 2021-03-18 | Jabil Inc. | Method and system for managing secure iot device applications |
CN110647324B (zh) * | 2019-09-18 | 2023-05-16 | 编缘(杭州)教育科技有限公司 | Python与Scratch交互式编程方法及电子设备 |
US11048483B2 (en) | 2019-09-24 | 2021-06-29 | Rockwell Automation Technologies, Inc. | Industrial programming development with an extensible integrated development environment (IDE) platform |
US10942710B1 (en) | 2019-09-24 | 2021-03-09 | Rockwell Automation Technologies, Inc. | Industrial automation domain-specific language programming paradigm |
US11733687B2 (en) | 2019-09-26 | 2023-08-22 | Rockwell Automation Technologies, Inc. | Collaboration tools |
US11042362B2 (en) | 2019-09-26 | 2021-06-22 | Rockwell Automation Technologies, Inc. | Industrial programming development with a trained analytic model |
US11163536B2 (en) | 2019-09-26 | 2021-11-02 | Rockwell Automation Technologies, Inc. | Maintenance and commissioning |
US11392112B2 (en) | 2019-09-26 | 2022-07-19 | Rockwell Automation Technologies, Inc. | Virtual design environment |
US11080176B2 (en) | 2019-09-26 | 2021-08-03 | Rockwell Automation Technologies, Inc. | Testing framework for automation objects |
WO2021061397A1 (en) * | 2019-09-27 | 2021-04-01 | Hypernet Labs, Inc. | Containerizing source code for execution in different language using drag-drop operation |
US11422547B2 (en) | 2019-10-21 | 2022-08-23 | Johnson Controls Tyco IP Holdings LLP | Building management system with machine learning for detecting anomalies in vibration data sets |
US11150877B2 (en) * | 2019-11-06 | 2021-10-19 | Google Llc | Automatically generating machine learning models for software tools that operate on source code |
US11632333B2 (en) | 2019-11-14 | 2023-04-18 | Sayantek, Inc | System and method for implementation of a distributed data flow-based framework |
CN112817573B (zh) * | 2019-11-18 | 2024-03-01 | 北京沃东天骏信息技术有限公司 | 用于构建流式计算应用的方法、装置、计算机系统和介质 |
US10929181B1 (en) * | 2019-11-22 | 2021-02-23 | Iterate Studio, Inc. | Developer independent resource based multithreading module |
CN110908916B (zh) * | 2019-11-27 | 2022-02-22 | 威创集团股份有限公司 | 一种调试工具及调试方法 |
JP7434560B2 (ja) | 2019-12-13 | 2024-02-20 | ライブパーソン, インコーポレイテッド | 双方向通信システムのためのサービスとしての機能クラウドチャットボット |
US11763217B2 (en) | 2019-12-20 | 2023-09-19 | Iterate Studio, Inc. | Dynamic feature loading |
CN111459965B (zh) * | 2019-12-24 | 2023-05-05 | 中国科学院沈阳自动化研究所 | 一种面向边缘计算的信息监控系统 |
WO2021137669A1 (ko) * | 2019-12-30 | 2021-07-08 | 매니코어소프트주식회사 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
JP2023511631A (ja) * | 2020-01-28 | 2023-03-20 | アビニシオ テクノロジー エルエルシー | 計算グラフを生成するためのエディタ |
EP3869228B1 (en) | 2020-02-21 | 2022-07-06 | Tata Consultancy Services Limited | Edge based sensor actuation and control in iot network for event monitoring |
US11061652B1 (en) * | 2020-03-26 | 2021-07-13 | Cognizant Technology Solutions India Pvt. Ltd. | System and a method for moving legacy applications to cloud |
US11308447B2 (en) | 2020-04-02 | 2022-04-19 | Rockwell Automation Technologies, Inc. | Cloud-based collaborative industrial automation design environment |
WO2021211911A1 (en) * | 2020-04-16 | 2021-10-21 | Blackswan Technologies Inc. | Artificial intelligence cloud operating system |
CN111782194B (zh) * | 2020-06-26 | 2022-09-13 | 西北工业大学 | 一种基于航空嵌入式开放体系架构的可移植单元代码自动生成方法 |
US20220004369A1 (en) * | 2020-07-01 | 2022-01-06 | Johnson Controls Tyco IP Holdings LLP | Rule builder and simulator tool for creating complex event processing rules |
EP3940586A1 (en) * | 2020-07-17 | 2022-01-19 | Sony Group Corporation | An electronic device and a related method for detecting and counting an action |
CN116711288A (zh) * | 2020-08-27 | 2023-09-05 | 西门子股份公司 | 用于分布式边缘节点部署的数据流图的集中式管理 |
SE545771C2 (en) * | 2020-08-28 | 2024-01-09 | Stream Analyze Sweden Ab | Method and system for data processing |
CN112052053B (zh) * | 2020-10-10 | 2023-12-19 | 国科晋云技术有限公司 | 一种清理高性能计算集群中挖矿程序的方法及系统 |
CN112394914B (zh) * | 2020-10-28 | 2022-05-24 | 浙江大学 | 一种面向物联网应用的以边缘为中心的编程方法 |
US11700178B2 (en) | 2020-10-30 | 2023-07-11 | Nutanix, Inc. | System and method for managing clusters in an edge network |
US11290330B1 (en) | 2020-10-30 | 2022-03-29 | Nutanix, Inc. | Reconciliation of the edge state in a telemetry platform |
US11223516B1 (en) | 2020-10-30 | 2022-01-11 | Nutanix, Inc. | Smart collection and processing in telemetry system |
CN116391172A (zh) * | 2020-11-09 | 2023-07-04 | “工艺系统”有限责任公司 | 用于创建和执行高度扩展的云应用的系统和方法 |
US11550583B2 (en) * | 2020-11-13 | 2023-01-10 | Google Llc | Systems and methods for handling macro compatibility for documents at a storage system |
CN112363856A (zh) * | 2020-11-19 | 2021-02-12 | 北京计算机技术及应用研究所 | 一种基于dds实现深度学习框架与应用程序互操作的方法 |
CN112416197B (zh) * | 2020-11-23 | 2021-12-03 | 山东师范大学 | 基于Excel和VBA的程序单步演示装置及方法 |
CN112506489A (zh) * | 2020-11-30 | 2021-03-16 | 广州市智能软件产业研究院 | 一种安全协议建模端与验证端的跨平台方法、计算机及存储介质 |
CN112327815A (zh) * | 2020-11-30 | 2021-02-05 | 北京一雄信息科技有限公司 | 一种批量测试汽车诊断仪数据流准确性的方法及装置 |
US11403090B2 (en) | 2020-12-08 | 2022-08-02 | Alibaba Group Holding Limited | Method and system for compiler optimization based on artificial intelligence |
KR102305845B1 (ko) | 2020-12-21 | 2021-09-29 | 쿠팡 주식회사 | 코드의 검증을 위한 전자 장치 및 그 방법 |
US20210117418A1 (en) * | 2020-12-23 | 2021-04-22 | Vikram Dadwal | Time-aware general-purpose input output for industrial control systems |
EP4036752A1 (en) * | 2021-01-29 | 2022-08-03 | ABB Schweiz AG | Method for analysing process data related to a segment of a production process |
US20220300850A1 (en) * | 2021-03-16 | 2022-09-22 | Data Gran, Inc. | End-to-end machine learning pipelines for data integration and analytics |
KR102500395B1 (ko) * | 2021-03-30 | 2023-02-16 | 서울시립대학교 산학협력단 | 프로그램 소스코드의 버그를 정정하는 장치 및 방법 |
EP4348359A1 (en) | 2021-05-28 | 2024-04-10 | Johnson Controls Tyco IP Holdings LLP | Building control system with predictive control of carbon emissions using marginal operating emissions rate |
CN113312652B (zh) * | 2021-06-25 | 2024-05-03 | 国网辽宁省电力有限公司电力科学研究院 | 基于改进cat的云边协同电力终端采集数据完整性验证系统 |
US20230090918A1 (en) * | 2021-09-21 | 2023-03-23 | Blackberry Limited | Method and system for vehicle data file playback |
US11902664B2 (en) | 2021-09-22 | 2024-02-13 | Adam A. Locke | Cellular telephone with protracting monitor screen and camera |
CN113944601A (zh) * | 2021-10-15 | 2022-01-18 | 上海大学 | 一种用于风机高频海量数据实时采集传输及处理的方法 |
WO2023066777A1 (en) * | 2021-10-19 | 2023-04-27 | Koninklijke Philips N.V. | Efficient log file transfer and processing using grouping of regular expressions and service level dependence |
WO2023081634A1 (en) * | 2021-11-05 | 2023-05-11 | Swarm Engineering, Inc. | Method of creating self-assembling, transient analytic and learning agents in a message-driven architecture |
CN114385178A (zh) * | 2021-12-14 | 2022-04-22 | 厦门大学 | 基于抽象语法树结构信息增强的代码生成方法 |
KR102455142B1 (ko) * | 2022-01-18 | 2022-10-17 | 한국과학기술원 | 컨테이너 환경을 위한 eBPF(extended Berkeley Packet Filter)/XDP(Express Data Path)에 기반한 고속 네트워크 패킷 페이로드 검사 시스템 |
CN114115834B (zh) * | 2022-01-25 | 2022-04-26 | 之江实验室 | 一种软硬件协同编译处理方法及系统 |
US11907142B2 (en) | 2022-02-04 | 2024-02-20 | Red Hat, Inc. | Configuring polling times for software applications |
US20230280059A1 (en) * | 2022-03-01 | 2023-09-07 | Johnson Controls Tyco IP Holdings LLP | Building automation system with edge device local configuration |
WO2023167862A1 (en) | 2022-03-01 | 2023-09-07 | Johnson Controls Tyco IP Holdings LLP | Building automation system with flexible architecture |
US11765065B1 (en) | 2022-03-23 | 2023-09-19 | Nutanix, Inc. | System and method for scalable telemetry |
TWI823408B (zh) * | 2022-05-27 | 2023-11-21 | 國立成功大學 | 機械設備雲端控制系統 |
US20230401043A1 (en) * | 2022-06-09 | 2023-12-14 | Xilinx, Inc. | Dataflow-based computer program visualization and refactoring |
US11972257B2 (en) * | 2022-07-12 | 2024-04-30 | Rockwell Automation Technologies, Inc. | Industrial automation system topology with point to point business rule integration |
WO2024068483A1 (en) | 2022-09-30 | 2024-04-04 | Sun Chemical B.V. | Led-curable offset inks containing aluminum additives |
EP4357915A1 (en) * | 2022-10-18 | 2024-04-24 | Nokia Solutions and Networks Oy | A computer program generating apparatus and method |
KR102651797B1 (ko) * | 2023-09-18 | 2024-03-28 | (주) 웨다 | Ai 비전문가를 위한 소프트웨어 정의 제조 기반의 머신러닝 플랫폼 시스템 |
Family Cites Families (100)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3979733A (en) * | 1975-05-09 | 1976-09-07 | Bell Telephone Laboratories, Incorporated | Digital data communications system packet switch |
US4975865A (en) * | 1989-05-31 | 1990-12-04 | Mitech Corporation | Method and apparatus for real-time control |
US5181025A (en) * | 1991-05-24 | 1993-01-19 | The United States Of America As Represented By The Secretary Of The Air Force | Conformal telemetry system |
JPH06168222A (ja) * | 1992-11-30 | 1994-06-14 | Toshiba Corp | プラントのシミュレーション装置 |
EP0687089B1 (en) * | 1994-06-10 | 2003-05-28 | Hewlett-Packard Company, A Delaware Corporation | Event-processing system and method of constructing such a system |
JP2965058B2 (ja) * | 1995-12-18 | 1999-10-18 | 日本電気株式会社 | Cpu命令エミュレートシステム |
US5916305A (en) * | 1996-11-05 | 1999-06-29 | Shomiti Systems, Inc. | Pattern recognition in data communications using predictive parsers |
US5896522A (en) * | 1996-12-31 | 1999-04-20 | Unisys Corporation | Selective emulation interpretation using transformed instructions |
JP3033713B2 (ja) * | 1997-06-12 | 2000-04-17 | 北海道日本電気ソフトウェア株式会社 | 仮想計算機エミュレート装置 |
US7743362B2 (en) * | 1998-02-17 | 2010-06-22 | National Instruments Corporation | Automatic generation of application domain specific graphical programs |
US6826756B1 (en) * | 1998-06-30 | 2004-11-30 | Symbol Technologies, Inc. | Automatic transfer of data from an input device to a software application |
US6522875B1 (en) | 1998-11-17 | 2003-02-18 | Eric Morgan Dowling | Geographical web browser, methods, apparatus and systems |
JP3788111B2 (ja) * | 1999-06-30 | 2006-06-21 | 株式会社デンソー | 情報サービスシステム |
US7937665B1 (en) * | 2000-06-13 | 2011-05-03 | National Instruments Corporation | System and method for automatically generating a graphical program to implement a prototype |
US7590644B2 (en) * | 1999-12-21 | 2009-09-15 | International Business Machine Corporation | Method and apparatus of streaming data transformation using code generator and translator |
US6725287B1 (en) | 2000-11-09 | 2004-04-20 | Elity Systems, Inc. | Method and system for capturing streaming data by an actionable information engine |
US9141708B2 (en) * | 2001-02-23 | 2015-09-22 | Metaframe Technologies Gmbh | Methods for generating selection structures, for making selections according to selection structures and for creating selection descriptions |
US7627860B2 (en) * | 2001-08-14 | 2009-12-01 | National Instruments Corporation | Graphically deployment of a program with automatic conversion of program type |
US20030035582A1 (en) * | 2001-08-14 | 2003-02-20 | Christian Linhart | Dynamic scanner |
US7203635B2 (en) | 2002-06-27 | 2007-04-10 | Microsoft Corporation | Layered models for context awareness |
US7293112B2 (en) * | 2002-11-12 | 2007-11-06 | National Instruments Corporation | Graphical program node for displaying acquired images |
JP2004303114A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | インタープリタおよびネイティブコード実行方法 |
US20070011334A1 (en) * | 2003-11-03 | 2007-01-11 | Steven Higgins | Methods and apparatuses to provide composite applications |
US7318075B2 (en) * | 2004-02-06 | 2008-01-08 | Microsoft Corporation | Enhanced tabular data stream protocol |
US7836426B2 (en) * | 2004-05-06 | 2010-11-16 | National Instruments Corporation | Automatic generation of application domain specific graphical programs |
US7650574B2 (en) * | 2004-05-11 | 2010-01-19 | National Instruments Corporation | Visually indicating problems found during programmatic analysis of a graphical program |
US7650594B2 (en) * | 2004-05-27 | 2010-01-19 | National Instruments Corporation | Graphical program analyzer with framework for adding user-defined tests |
JP2006095440A (ja) * | 2004-09-29 | 2006-04-13 | Toshiba Corp | 下水処理場の運転管理システム |
JP2008524965A (ja) | 2004-12-21 | 2008-07-10 | ミスルトウ テクノロジーズ, インコーポレイテッド | ネットワークインターフェイスおよびファイヤーウォールデバイス |
US7627544B2 (en) | 2005-05-20 | 2009-12-01 | Microsoft Corporation | Recognizing event patterns from event streams |
US7907610B2 (en) * | 2005-05-23 | 2011-03-15 | Nxp B.V. | Integrated circuit with internal communication network |
US20070044072A1 (en) * | 2005-08-16 | 2007-02-22 | Hayles Timothy J | Automatically Generating a Graphical Data Flow Program Based on a Circuit Diagram |
US7864178B2 (en) * | 2005-11-09 | 2011-01-04 | National Instruments Corporation | Creating machine vision inspections using a state diagram representation |
US8543337B2 (en) | 2006-04-21 | 2013-09-24 | The Mathworks, Inc. | Block diagram explorer in a method and apparatus for integrated modeling, simulation and analysis of chemical and biological systems |
US8046739B2 (en) * | 2006-08-04 | 2011-10-25 | National Instruments Corporation | System and method for enabling a graphical program to propagate attributes of inputs and outputs of blocks |
US9038041B2 (en) * | 2006-12-04 | 2015-05-19 | Tibco Software, Inc. | Stream processor with compiled programs |
US8370812B2 (en) * | 2007-04-02 | 2013-02-05 | International Business Machines Corporation | Method and system for automatically assembling processing graphs in information processing systems |
US7899904B2 (en) | 2007-04-30 | 2011-03-01 | Lsi Corporation | Hardware processing of regular expressions |
US8812261B2 (en) | 2007-08-23 | 2014-08-19 | Applied Materials, Inc. | Method and apparatus to automatically create virtual sensors with templates |
US20090106011A1 (en) * | 2007-10-22 | 2009-04-23 | International Business Machines Corporation | System and method for developing and deploying sensor and actuator applications over distributed computing infrastructure |
US8364456B2 (en) * | 2008-01-10 | 2013-01-29 | The Mathworks, Inc. | Conditionally executed states |
KR101468546B1 (ko) | 2008-02-11 | 2014-12-03 | 삼성전자 주식회사 | 이미지 센서의 구동 방법 |
US20090228407A1 (en) | 2008-03-05 | 2009-09-10 | The Boeing Company | Distributed cognitive architecture |
US9305238B2 (en) * | 2008-08-29 | 2016-04-05 | Oracle International Corporation | Framework for supporting regular expression-based pattern matching in data streams |
CN101442540B (zh) * | 2008-12-30 | 2012-09-05 | 合肥昊特信息科技有限公司 | 基于现场可编程门阵列的高速模式匹配算法 |
US8250016B2 (en) * | 2009-04-17 | 2012-08-21 | Alcatel Lucent | Variable-stride stream segmentation and multi-pattern matching |
US8286191B2 (en) * | 2009-05-14 | 2012-10-09 | International Business Machines Corporation | Dynamically composing data stream processing applications |
US8880524B2 (en) * | 2009-07-17 | 2014-11-04 | Apple Inc. | Scalable real time event stream processing |
US8584120B2 (en) * | 2009-11-23 | 2013-11-12 | Julian Michael Urbach | Stream-based software application delivery and launching system |
WO2011072140A1 (en) * | 2009-12-09 | 2011-06-16 | The Mathworks, Inc. | Canonicalized versions of reuse candidates in graphical state diagrams |
CN101860978B (zh) | 2010-05-14 | 2012-05-09 | 南京邮电大学 | 一种物联网体系结构 |
US8719774B2 (en) * | 2010-07-30 | 2014-05-06 | National Instruments Corporation | Developing programs for hardware implementation in a graphical specification and constraint language Via iterative estimation of performance or resource utilization |
JP5902185B2 (ja) * | 2010-10-25 | 2016-04-13 | アビニシオ テクノロジー エルエルシー | コンピュータプログラムを表すデータフローグラフ内のデータセットオブジェクトの管理 |
CN103547999B (zh) * | 2011-01-25 | 2017-05-17 | 美光科技公司 | 利用专用元件实施有限状态机 |
US9858051B2 (en) * | 2011-06-24 | 2018-01-02 | Cavium, Inc. | Regex compiler |
JP5640910B2 (ja) * | 2011-06-27 | 2014-12-17 | 富士通株式会社 | 照合装置および照合プログラム |
US8948643B2 (en) * | 2011-06-30 | 2015-02-03 | Xerox Corporation | Method and system for controlling multiple printers in a TISP or TIPP system for increased stability |
BR112014006446B1 (pt) | 2011-09-19 | 2021-09-21 | Tata Consultancy Service Limited | Plataforma de computação para desenvolvimento e implantação de aplicações e serviços de dados baseados em sensor |
US8756189B2 (en) * | 2011-10-31 | 2014-06-17 | International Business Machines Corporation | Rule generation for event processing system |
US20130144814A1 (en) * | 2011-12-05 | 2013-06-06 | International Business Machines Corporation | Conditional probability operator for event processing systems |
US20130191809A1 (en) * | 2012-01-25 | 2013-07-25 | Microsoft Corporation | Graphical representation of an order of operations |
JP6033891B2 (ja) * | 2012-02-15 | 2016-11-30 | ザ マスワークス, インクThe Mathworks, Inc. | 状態図の生成 |
US9141631B2 (en) * | 2012-04-16 | 2015-09-22 | International Business Machines Corporation | Table boundary detection in data blocks for compression |
JP6154894B2 (ja) | 2012-06-08 | 2017-06-28 | エアビクティ インコーポレイテッド | 電子センサデータを評価して、自動車を遠隔的に識別し運転者の挙動を監視する方法 |
US20140013313A1 (en) * | 2012-07-03 | 2014-01-09 | Johan Eker | Editor/Development Tool for Dataflow Programs |
US9253054B2 (en) | 2012-08-09 | 2016-02-02 | Rockwell Automation Technologies, Inc. | Remote industrial monitoring and analytics using a cloud infrastructure |
US8893080B2 (en) * | 2012-08-15 | 2014-11-18 | Telefonaktiebolaget L M Ericsson (Publ) | Parallelization of dataflow actors with local state |
IN2015DN01932A (zh) | 2012-09-28 | 2015-08-07 | Ericsson Telefon Ab L M | |
US8914875B2 (en) | 2012-10-26 | 2014-12-16 | Facebook, Inc. | Contextual device locking/unlocking |
US9043264B2 (en) * | 2012-12-14 | 2015-05-26 | International Business Machines Corporation | Scanning data streams in real-time against large pattern collections |
CN103024059B (zh) | 2012-12-19 | 2015-08-26 | 北京时代凌宇科技有限公司 | 一种物联网中间件系统 |
DE112014001381T5 (de) * | 2013-03-15 | 2016-03-03 | Fisher-Rosemount Systems, Inc. Emerson Process Management | Datenmodellierungsstudio |
CN103200249A (zh) | 2013-03-26 | 2013-07-10 | 大连理工大学 | 物联网智能数据网关系统的实现方法 |
US9235395B2 (en) * | 2013-05-30 | 2016-01-12 | National Instruments Corporation | Graphical development and deployment of parallel floating-point math functionality on a system with heterogeneous hardware components |
KR20150049763A (ko) | 2013-10-31 | 2015-05-08 | 대우조선해양 주식회사 | 부유식 복합 화력발전 플랜트용 폐수 처리시스템의 용존 고형물 처리 시스템 |
WO2015071978A1 (ja) | 2013-11-13 | 2015-05-21 | 富士通株式会社 | イベント管理プログラム、イベント管理方法および分散システム |
US9934279B2 (en) * | 2013-12-05 | 2018-04-03 | Oracle International Corporation | Pattern matching across multiple input data streams |
WO2015097427A1 (en) * | 2013-12-23 | 2015-07-02 | British Telecommunications Public Limited Company | Improved pattern matching machine |
US9843647B2 (en) | 2014-02-25 | 2017-12-12 | Here Global B.V. | Method and apparatus for providing selection and prioritization of sensor data |
US9806974B2 (en) | 2014-04-23 | 2017-10-31 | Cisco Technology, Inc. | Efficient acquisition of sensor data in an automated manner |
US9712645B2 (en) * | 2014-06-26 | 2017-07-18 | Oracle International Corporation | Embedded event processing |
US20160065306A1 (en) | 2014-09-02 | 2016-03-03 | Chin Sheng Henry Chong | System and method for green communication for intelligent mobile internet of things |
CN104361058A (zh) * | 2014-10-31 | 2015-02-18 | 广东工业大学 | 一种面向海量数据流的哈希结构复杂事件检测方法 |
US10054450B2 (en) | 2014-11-21 | 2018-08-21 | Here Global B.V. | Method and apparatus for determining trajectory paths on a transportation structure |
US10599982B2 (en) | 2015-02-23 | 2020-03-24 | Machinesense, Llc | Internet of things based determination of machine reliability and automated maintainenace, repair and operation (MRO) logs |
US9495647B2 (en) | 2015-02-24 | 2016-11-15 | Sas Institute Inc. | Acceleration of sparse support vector machine training through safe feature screening |
US20170052767A1 (en) * | 2015-08-20 | 2017-02-23 | CITIUS SOFTWARE CORPORATION dba KBMax | Visual rule language systems and methods for enterprise business software |
US10318404B2 (en) * | 2015-08-28 | 2019-06-11 | Turck Holding, GmbH | Web-based programming environment for embedded devices |
US10756991B2 (en) * | 2015-09-17 | 2020-08-25 | Salesforce.Com, Inc. | Simplified entity engagement automation |
US10331495B2 (en) * | 2016-02-05 | 2019-06-25 | Sas Institute Inc. | Generation of directed acyclic graphs from task routines |
KR102092721B1 (ko) * | 2016-03-23 | 2020-04-23 | 포그혼 시스템스 인코포레이티드 | 실시간 데이터플로우 프로그래밍에서 패턴 구동형 반응의 구성 |
US11204815B2 (en) | 2017-05-09 | 2021-12-21 | Microsoft Technology Licensing, Llc | Creation of modular applications with corresponding twins in the cloud |
US10310896B1 (en) * | 2018-03-15 | 2019-06-04 | Sas Institute Inc. | Techniques for job flow processing |
US11782410B2 (en) | 2020-06-06 | 2023-10-10 | Honeywell International Inc. | Building management system with control logic distributed between a virtual controller and a smart edge controller |
US11720074B2 (en) | 2020-06-06 | 2023-08-08 | Honeywell International Inc. | Method and system for managing virtual controllers in a building management system |
US11940786B2 (en) | 2020-06-06 | 2024-03-26 | Honeywell International Inc. | Building management system and method with virtual controller and failsafe mode |
EP3919991A3 (en) | 2020-06-06 | 2022-02-16 | Honeywell International Inc. | Method and system for configuring a building management system |
US20210389968A1 (en) | 2020-06-15 | 2021-12-16 | Honeywell International Inc. | Edge controller for a facility |
US11526449B2 (en) * | 2020-08-31 | 2022-12-13 | Advanced Micro Devices, Inc. | Limited propagation of unnecessary memory updates |
US11252209B1 (en) * | 2021-07-13 | 2022-02-15 | Audacious Inquiry, LLC | Network architecture for parallel data stream analysis and modification |
-
2017
- 2017-03-23 KR KR1020187030472A patent/KR102092721B1/ko active IP Right Grant
- 2017-03-23 KR KR1020187030473A patent/KR102092722B1/ko active IP Right Grant
- 2017-03-23 US US15/467,313 patent/US10564941B2/en active Active
- 2017-03-23 JP JP2018549906A patent/JP2019516167A/ja active Pending
- 2017-03-23 WO PCT/US2017/023912 patent/WO2017165713A1/en active Application Filing
- 2017-03-23 CN CN202210437492.5A patent/CN115373977A/zh active Pending
- 2017-03-23 EP EP17771196.7A patent/EP3433768A4/en active Pending
- 2017-03-23 AU AU2017238633A patent/AU2017238633B2/en active Active
- 2017-03-23 JP JP2018549799A patent/JP6896759B2/ja active Active
- 2017-03-23 EP EP17771200.7A patent/EP3433769B1/en active Active
- 2017-03-23 CN CN201780019786.3A patent/CN108885580B/zh active Active
- 2017-03-23 US US15/467,318 patent/US10127022B2/en active Active
- 2017-03-23 WO PCT/US2017/023911 patent/WO2017165712A1/en active Application Filing
- 2017-03-23 US US15/467,306 patent/US10572230B2/en active Active
- 2017-03-23 KR KR1020187030471A patent/KR102128571B1/ko active IP Right Grant
- 2017-03-23 AU AU2017238638A patent/AU2017238638B2/en active Active
- 2017-03-23 WO PCT/US2017/023906 patent/WO2017165708A1/en active Application Filing
- 2017-03-23 EP EP17771201.5A patent/EP3433711A4/en active Pending
- 2017-03-23 CN CN201780019779.3A patent/CN108885545B/zh active Active
- 2017-03-23 CN CN201780019780.6A patent/CN108885632B/zh active Active
- 2017-03-23 CN CN202211226634.XA patent/CN115629829A/zh active Pending
- 2017-03-23 JP JP2018549927A patent/JP7019589B2/ja active Active
- 2017-03-23 AU AU2017238637A patent/AU2017238637B2/en active Active
-
2018
- 2018-09-23 SA SA518400086A patent/SA518400086B1/ar unknown
- 2018-09-23 SA SA518400085A patent/SA518400085B1/ar unknown
- 2018-11-13 US US16/190,105 patent/US10628135B2/en active Active
-
2020
- 2020-02-14 US US16/792,149 patent/US11561774B2/en active Active
- 2020-02-25 US US16/801,099 patent/US11226795B2/en active Active
- 2020-04-21 US US16/854,873 patent/US10977010B2/en active Active
-
2021
- 2021-04-13 US US17/229,782 patent/US11422778B2/en active Active
-
2022
- 2022-01-14 JP JP2022004285A patent/JP7371141B2/ja active Active
- 2022-01-18 US US17/648,281 patent/US20220137936A1/en active Pending
- 2022-02-02 JP JP2022014853A patent/JP7326510B2/ja active Active
- 2022-05-03 AU AU2022202972A patent/AU2022202972B2/en active Active
- 2022-08-22 US US17/892,927 patent/US20230367559A1/en active Pending
-
2023
- 2023-01-10 US US18/095,382 patent/US20230147358A1/en active Pending
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108885580B (zh) | 实时数据流编程中模式驱动反应的组合 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |