INtime 多核CPU同步处理大量数据的方法
从21世纪中期工业控制系统的出现以来,工业生产自动化的程度不断提高,应用于工业控制现场的仪器仪表种类,系统中需要采集、处理和控制的信号越来越多、越来越复杂,这就使得工业控制系统的地位在整个工业发展中越发变得重要。为了适应整个工业生产的发展,现代工业控制系统随着社会生产的发展而不断的发展和进步,和模拟仪表、PLC、DCS、FCS等控制系统相比,基于PC(适用于工业现场的工业PC或普通PC)的工业控制系统能更加快速有效地进行数据处理和相互通讯,能灵活地在工业控制环境中控制各个终端并且相互之间能快速通信,也使得控制系统能和上层管理系统紧密结合在一起,便于生产的监控和管理。而且,更重要的是,它是一种完全开发的系统,非常利于产品的开发维护和升级,所以其在工控领域得到了普遍认同,相关的应用领域迅速扩大,成为工控领域的一种新趋势。
众所周知,基于PC的工业控制系统必定会和Windows、Intel联系在一起。作为Windows和Intel的合作伙伴,TenAsys公司也一直紧随Windows的发展,推出兼容最新版Windows的INtime实时操作系统。INtime实时操作系统是按照每个CPU作为一个独立的节点(node)进行设计的,节点作为INtime操作系统的一个实例,包括内核和运行在它上的应用程序。Windows节点则是windows操作系统的一个实例,包括在其上运行的windows应用程序。IPC工控机CPU核可以全部设置成INtime节点,即完全脱离Windows运行。
上图为INtime配置界面,可以本地或远程对IPC的CPU核进行配置。配置界面的左侧列表显示配置了2个CPU核作为INtime节点,分别是CPU的Core2和Core3,它是INtime系统自动按照从后向前进行分配的。配置区右边为INtime当前某个节点的详细配置信息,包含独占/共享模式、内存大小、网络配置、第三方程序自动加载等。
INtime支持多个CPU核同时运行实时程序,对某些应用中单个CPU核的处理能力不足以处理大量的数据时,可以考虑使用多个核同时处理。当多个核处理同一批输入数据时,它们之间的同步问题就显得非常重要了。TenAsys公司利用共享内存的机制,采用内部GOBSnet接口可以实现多个CPU核之间的数据共享,提高CPU同步处理大数据的能力。除单机IPC不同核之间通过GOBSnet进行数据同步外,INtime还支持多机IPC之间的分布式操作,通过IP网络承载GOBSnet接口完成数据之间的同步处理。开发者仅需要在GOBSnet之上定义自己的协议就可以完成不同计算机的不同CPU核之间的实时通讯。TenAsys INtime分布式特点非常适合运动控制、生产控制、远程操作之间的协同。
INtime全局对象(GOBSnet)使实时内核在不同节点上实例数据驻留的情况下,实时进程也能够交互。该功能与NTX协议提供给Windows应用程序的功能大体相似,增强功能可考虑线程优先级和多个客户端访问的问题。
全局对象技术允许实时进程访问存在于INtime内核的另一个实例上的对象。这些“全局”对象中的每一个都有一个名为“引用”的相应的本地对象,该引用指向该对象,并可由本地进程在标准API中使用。例如,进程可以在不同的INtime节点上获取对邮箱的引用,然后使用标准SendRtData和接收方数据API访问邮箱。API用于发现其他节点、创建新的全局对象以及创建和删除引用对象。
在 INtime分布式 RTOS 配置中,Windows 不与 INtime节点在同一平台和处理器上运行。 在时间可以运行在部分或所有的目标处理器节点上,这取决于用户如何配置它。
INtime系统被认为是一个或多个节点的集合。多个节点通过共享内存(同一主机上的多个处理器内核)或以太网进行连接。节点的地址根据其本地逻辑APIC ID及其网络地址(IP)来描述。节点的位置是由一个节点上的进程使用以标识另一个节点的参数。在多核主机仅从一个节点连接到INtime网络的情况下,请求将被连接的节点转发到目标节点。通过NTX API从Windows访问任何INtime节点。在网络上进行NTX请求时,底层网络协议与INtime to INtime协议共享。
可以将信号量、邮箱或内存对象的特殊实例创建为全局对象,它们是可以在本地节点或远程节点上创建的对象类,也可以选择创建该对象,使其不属于创建进程本身。可以使用API 函数如CreateGlobalRtSemaphore、CreateGlobalRtMailbox、CreateGlobalRtMemoryObject和CreateGlobalRtMemoryHandle来创建此类对象。在通常情况下,使用这些API创建的对象被认为属于创建过程,因此在进程被删除时被隐式删除,如果使用REFCOUNT标志创建此类对象,这意味着该被创建的对象不属于创建进程。被创建对象有一个关联的引用计数器,它是增量的,它的计数值在每次被引用或停止引用时进行增减,直到它的值为0时才会被删除。INtime就是按照这样的方法实现多个节点之间数据引用。
注:部分资料来源于网络。