论文部分内容阅读
摘要:PLC,即可编程逻辑控制器,广泛应用于工业生产中的自动化控制、信息采集环节。目前单核PLC逐渐难以应对复杂的工业场景,多核处理器PLC有异构等特性,在性能、功耗、响应和计算能力方面有显著优势。本文旨在分析多核处理器PLC的优势与编程方案。
关键词:可编程逻辑控制器;异构多核系统
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)33-0198-02
1 背景
1.1 PLC的诞生与发展
PLC全称是Programmable Logic Controller,即可编程控制器,最早出现于20世纪60年代,伴随着微处理器(MPU)和超大规模集成电路技术的发展迅速成长。至20世纪80年代,欧美开始使用微处理器作为PLC的中央处理单元,确立了PLC的哈佛结构。哈佛结构用不同的存储器分别存储程序指令和数据,这样使得数据和程序指令的读取可以同时进行,具有较高的执行效率。
上世纪末,IEC 61131成为PLC国际标准,以及微处理器技术飞速发展,PLC在体系结构上,就是多核化和异构化的发展趋势。
本世紀以来,PLC编程逐渐走向标准化,利用统一的编程标准,可以突破不同PLC平台的限制,方便地进行PLC程序移植;基于标准编写的程序,甚至可以在PLC与非PLC平台之间移植。
1.2 多核PLC前景
多核处理器突破了单核处理器发展的瓶颈,异构为多核带来了更多优点[1]:
1)控制逻辑简单:单个核心处理的任务类型单一;
2)高主频:全局信号少,减少了线延迟;
3)强扩展性:各核处理特定任务,可以针对单个核心升级扩展而不影响其他任务;
4)低功耗:多核体系中区分核内时钟和跨核时钟,降低驱动负载。
传统PLC大都采用分时任务操作系统,把CPU划分为多个时间片,每个任务轮流占用CPU;操作系统也有优先级策略,可以满足高响应速度需求的进程优先占用;但时间片是基本的执行单位,操作系统进行任务切换也需要开销,所以响应速度只能局限在毫秒级。
当前PLC应用在更大规模的问题上,数据和计算量都有了量级的提升,在更高精尖的领域,也需要更高的响应速度,单核PLC的分时系统已经难以满足求。多核PLC中,采用分核操作系统实现,将特定任务分配给特定的核心执行,每个核心采用分时策略;对于需要快速响应的任务,通常可以使用专门的核心进行通信;大量的计算和数据流,可以交给多个IO核心与计算核心并形完成。为了实现多个核心的协调,多核PLC系统往往会有一个主核心,完成控制和协调工作。通过这种多核心任务分发,减轻单个核心的负载,对整个系统的计算能力和响应速度有很大的提升,是突破单核PLC性能瓶颈的方案。
2 PLC图形编程模型
PLC大多数情况是面向非软专业件开发人员,所以通常采用图形化界面,无需代码,直观展示逻辑。PLC编程中通常使用梯形图方式来表示器件,下面介绍一种PLC梯形图编程的设计思路。
2.1 梯形图检查
梯形图是用户编程的图形接口,需要进行基本的检查,类似于普通程序编译器中的语法检查[2]。检查过程如图1。
短路判断:记录两并连线之间的元件个数N,如果N=0,则判断为短路。
断路判断:沿着电路遍历元件,并对经过的元件设立标志位VISITED=TRUE;梯形图中存在VISITED=FALSE的元件,即可判断其断路。
2.2构造逻辑树
梯形图是电路逻辑的图形化表示,梯形图必须转化为指令表,进而编译成机器语言,才能在PLC的微处理器上执行。梯形图整个编辑过程是动态添加与删除,故采用链表存储图形元素;再把已完成的梯形图构造为树[3]。
经过2.1检查过的单个梯级图,总能用树形结构表示。图2展示了一个梯级图转换为树形结构的结果。通过逐个元件遍历梯形图,就能从叶节点到根节点生成一棵树。树的每个叶节点与梯级图中的元件一一对应;每个非叶节点,存储了其子树代表的局部电路的连接关系。每个梯级图可转换为一棵单根树,该树的所有元件出现在叶子节点,所有的叶子节点都是元件。对于有多个梯级图的PLC电路,会生成一个森林。
梯级图的遍历方式与电流经过的路径一致,树的生成按照从叶子到根逐层升高,对应梯级图中从元件到局部电路再到全局电路的表示。
2.3遍历逻辑树生成指令
对每个逻辑树中的节点而言,需要回溯到其父节点,获取所有兄弟节点,并根据父节点提供的连接关系与兄弟节点生成电路逻辑,所以每个节点必须包含如下信息:
1) 节点信息:叶节点的元件类型或非叶节点的连接关系。
2) 子节点:可以采用线性结构存储指向所有孩子的指针。
3) 父节点:指向父节点的单个指针。
一棵逻辑树中的根节点、非叶非跟节点、叶节点可以通过子节点和父节点是否为空判断。基于以上数据结构,可以通过树的从底向上遍历生成指令,规则如下:
1) 起始时,申请一个栈,用来存储中间结果和原始操作数;
2) LD,直接将操作数入栈;
3) ALD,栈顶两个元素出栈,进行与运算,结果入栈;
4) OLD,栈顶两个元素出栈,进行或运算,结果入栈;
5) =,栈顶元素出栈,并为当前操作数赋值;
6) 运算指令,栈顶元素出栈,与当前操作数预算,结果入栈。
3 并行化方案
传统的PLC图形编程已经相对成熟,在传统的编程模型基础上,使用并行方案为不同的核心生成不同的控制逻辑与数据流,可以达到多核协作并发的目的。下面介绍几种并行方案。 3.1扩展编译器
大多数的高级编程语言编写的程序,都是经过编译器转换为汇编指令,进而转换为机器码才能被处理器所执行。PLC编程也要经过逻辑树转换为指令集,才能生成机器码供MPU执行,所以编译器PLC程序执行的必由之路,也是并行化的重要途径[4]。
编译器是根据用户编写的程序生成指令的工具,所以并行化过程对用户透明,不会给程序编写人员带来额外负担。
在多核异构PLC平台下,图形化编程将梯形图转化为指令表,可以在这一步加入并行编译器。编译器需要绑定目标PLC平台,根据核心分布情况,将不同的逻辑转换为对应核心的指令表。比如,IO密集型和计算密集型的任務,需要分配给不同的核心。在实际应用中,系统需要根据各核心的负载情况和公共资源使用,编译器需要考虑到负载均衡、数据共享、访问控制,否则容易产生运算错误或过长的停止等待,影响多核的实际效率。
由此可见,这个方案为编译器提出了更加苛刻的要求:对于复杂的代码,考虑到并行与体系结构的紧密相关性,编译器并不能识别很多并行代码,从而造成并行程度不足;对于复杂的体系结构和高关联性任务,编译器无法胜任负载均衡、多核优化等需求,使程序无法很好的并发执行。因此,扩展编译器对多核PLC编程而言,是一种简单的实现方案,但存在先天不足。
3.2扩展串行语言
扩展串行语言有很多方式,在高级编程语言中,OpenMP是基于该方案一种流行的API。这类方案通过调用为使串行语言支持并行模型,例如多核情况下的消息通信、数据共享等。与编译器扩展方案不同,这种方式需要一定地代码修改,显式地调用相关API,指定并发的代码段和同步方案。
OpenMP值得借鉴的是,其与平台无关的实现形式,这在多品牌、多型号的PLC市场显得尤为重要。
OpenMP的思想应用到多核PLC平台,就需要PLC硬件对用户提供多线程指令,同时需要主控核心执行这些指令,将对应的线程分配到对应的核心。但是,PLC编程不是面向专业的程序开发人员或硬件设计人员,所以直接操控硬件资源分配的编程方式具有很大的风险,对PLC程序的稳定性构成了一定威胁。
考虑到扩展方式的优势和风险,可以通过基于PLC虚拟机的集成开发环境实现。用户根据串行方案编写程序后,集成开发环境可以调用相关API做并行优化,并在PLC虚拟机上执行优化后的机器码,同时根据仿真情况给出性能报告,通过自优化和用户改进提高并行效率,是一种可行的并行化方案。
4 结论
传统计算机的多核编程方案对PLC编程有一定的借鉴意义,相信随着PLC异构多核技术的成熟与多核编程方案的成熟,多核PLC的应用也会更加广泛。
参考文献:
[1] 陶旭东.用于先进PLC的异构多核MPU研究与设计[D].沈阳理工大学,2011.
[2] 莫易敏,章德平,周哲.PLC梯形图转化为指令表算法及实现[J].控制工程,2006(6).
[3] 保慧.PLC图形化编程系统的研究与实现[J].现代机械,2006(1).
[4] 伊君翰.基于多核的并行编程模型[D].复旦大学,2008.
[5] 汪前进,高勇,李存华.基于多核处理器的多任务并行处理技术研究[J].计算机应用与软件,2012(4).
关键词:可编程逻辑控制器;异构多核系统
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)33-0198-02
1 背景
1.1 PLC的诞生与发展
PLC全称是Programmable Logic Controller,即可编程控制器,最早出现于20世纪60年代,伴随着微处理器(MPU)和超大规模集成电路技术的发展迅速成长。至20世纪80年代,欧美开始使用微处理器作为PLC的中央处理单元,确立了PLC的哈佛结构。哈佛结构用不同的存储器分别存储程序指令和数据,这样使得数据和程序指令的读取可以同时进行,具有较高的执行效率。
上世纪末,IEC 61131成为PLC国际标准,以及微处理器技术飞速发展,PLC在体系结构上,就是多核化和异构化的发展趋势。
本世紀以来,PLC编程逐渐走向标准化,利用统一的编程标准,可以突破不同PLC平台的限制,方便地进行PLC程序移植;基于标准编写的程序,甚至可以在PLC与非PLC平台之间移植。
1.2 多核PLC前景
多核处理器突破了单核处理器发展的瓶颈,异构为多核带来了更多优点[1]:
1)控制逻辑简单:单个核心处理的任务类型单一;
2)高主频:全局信号少,减少了线延迟;
3)强扩展性:各核处理特定任务,可以针对单个核心升级扩展而不影响其他任务;
4)低功耗:多核体系中区分核内时钟和跨核时钟,降低驱动负载。
传统PLC大都采用分时任务操作系统,把CPU划分为多个时间片,每个任务轮流占用CPU;操作系统也有优先级策略,可以满足高响应速度需求的进程优先占用;但时间片是基本的执行单位,操作系统进行任务切换也需要开销,所以响应速度只能局限在毫秒级。
当前PLC应用在更大规模的问题上,数据和计算量都有了量级的提升,在更高精尖的领域,也需要更高的响应速度,单核PLC的分时系统已经难以满足求。多核PLC中,采用分核操作系统实现,将特定任务分配给特定的核心执行,每个核心采用分时策略;对于需要快速响应的任务,通常可以使用专门的核心进行通信;大量的计算和数据流,可以交给多个IO核心与计算核心并形完成。为了实现多个核心的协调,多核PLC系统往往会有一个主核心,完成控制和协调工作。通过这种多核心任务分发,减轻单个核心的负载,对整个系统的计算能力和响应速度有很大的提升,是突破单核PLC性能瓶颈的方案。
2 PLC图形编程模型
PLC大多数情况是面向非软专业件开发人员,所以通常采用图形化界面,无需代码,直观展示逻辑。PLC编程中通常使用梯形图方式来表示器件,下面介绍一种PLC梯形图编程的设计思路。
2.1 梯形图检查
梯形图是用户编程的图形接口,需要进行基本的检查,类似于普通程序编译器中的语法检查[2]。检查过程如图1。
短路判断:记录两并连线之间的元件个数N,如果N=0,则判断为短路。
断路判断:沿着电路遍历元件,并对经过的元件设立标志位VISITED=TRUE;梯形图中存在VISITED=FALSE的元件,即可判断其断路。
2.2构造逻辑树
梯形图是电路逻辑的图形化表示,梯形图必须转化为指令表,进而编译成机器语言,才能在PLC的微处理器上执行。梯形图整个编辑过程是动态添加与删除,故采用链表存储图形元素;再把已完成的梯形图构造为树[3]。
经过2.1检查过的单个梯级图,总能用树形结构表示。图2展示了一个梯级图转换为树形结构的结果。通过逐个元件遍历梯形图,就能从叶节点到根节点生成一棵树。树的每个叶节点与梯级图中的元件一一对应;每个非叶节点,存储了其子树代表的局部电路的连接关系。每个梯级图可转换为一棵单根树,该树的所有元件出现在叶子节点,所有的叶子节点都是元件。对于有多个梯级图的PLC电路,会生成一个森林。
梯级图的遍历方式与电流经过的路径一致,树的生成按照从叶子到根逐层升高,对应梯级图中从元件到局部电路再到全局电路的表示。
2.3遍历逻辑树生成指令
对每个逻辑树中的节点而言,需要回溯到其父节点,获取所有兄弟节点,并根据父节点提供的连接关系与兄弟节点生成电路逻辑,所以每个节点必须包含如下信息:
1) 节点信息:叶节点的元件类型或非叶节点的连接关系。
2) 子节点:可以采用线性结构存储指向所有孩子的指针。
3) 父节点:指向父节点的单个指针。
一棵逻辑树中的根节点、非叶非跟节点、叶节点可以通过子节点和父节点是否为空判断。基于以上数据结构,可以通过树的从底向上遍历生成指令,规则如下:
1) 起始时,申请一个栈,用来存储中间结果和原始操作数;
2) LD,直接将操作数入栈;
3) ALD,栈顶两个元素出栈,进行与运算,结果入栈;
4) OLD,栈顶两个元素出栈,进行或运算,结果入栈;
5) =,栈顶元素出栈,并为当前操作数赋值;
6) 运算指令,栈顶元素出栈,与当前操作数预算,结果入栈。
3 并行化方案
传统的PLC图形编程已经相对成熟,在传统的编程模型基础上,使用并行方案为不同的核心生成不同的控制逻辑与数据流,可以达到多核协作并发的目的。下面介绍几种并行方案。 3.1扩展编译器
大多数的高级编程语言编写的程序,都是经过编译器转换为汇编指令,进而转换为机器码才能被处理器所执行。PLC编程也要经过逻辑树转换为指令集,才能生成机器码供MPU执行,所以编译器PLC程序执行的必由之路,也是并行化的重要途径[4]。
编译器是根据用户编写的程序生成指令的工具,所以并行化过程对用户透明,不会给程序编写人员带来额外负担。
在多核异构PLC平台下,图形化编程将梯形图转化为指令表,可以在这一步加入并行编译器。编译器需要绑定目标PLC平台,根据核心分布情况,将不同的逻辑转换为对应核心的指令表。比如,IO密集型和计算密集型的任務,需要分配给不同的核心。在实际应用中,系统需要根据各核心的负载情况和公共资源使用,编译器需要考虑到负载均衡、数据共享、访问控制,否则容易产生运算错误或过长的停止等待,影响多核的实际效率。
由此可见,这个方案为编译器提出了更加苛刻的要求:对于复杂的代码,考虑到并行与体系结构的紧密相关性,编译器并不能识别很多并行代码,从而造成并行程度不足;对于复杂的体系结构和高关联性任务,编译器无法胜任负载均衡、多核优化等需求,使程序无法很好的并发执行。因此,扩展编译器对多核PLC编程而言,是一种简单的实现方案,但存在先天不足。
3.2扩展串行语言
扩展串行语言有很多方式,在高级编程语言中,OpenMP是基于该方案一种流行的API。这类方案通过调用为使串行语言支持并行模型,例如多核情况下的消息通信、数据共享等。与编译器扩展方案不同,这种方式需要一定地代码修改,显式地调用相关API,指定并发的代码段和同步方案。
OpenMP值得借鉴的是,其与平台无关的实现形式,这在多品牌、多型号的PLC市场显得尤为重要。
OpenMP的思想应用到多核PLC平台,就需要PLC硬件对用户提供多线程指令,同时需要主控核心执行这些指令,将对应的线程分配到对应的核心。但是,PLC编程不是面向专业的程序开发人员或硬件设计人员,所以直接操控硬件资源分配的编程方式具有很大的风险,对PLC程序的稳定性构成了一定威胁。
考虑到扩展方式的优势和风险,可以通过基于PLC虚拟机的集成开发环境实现。用户根据串行方案编写程序后,集成开发环境可以调用相关API做并行优化,并在PLC虚拟机上执行优化后的机器码,同时根据仿真情况给出性能报告,通过自优化和用户改进提高并行效率,是一种可行的并行化方案。
4 结论
传统计算机的多核编程方案对PLC编程有一定的借鉴意义,相信随着PLC异构多核技术的成熟与多核编程方案的成熟,多核PLC的应用也会更加广泛。
参考文献:
[1] 陶旭东.用于先进PLC的异构多核MPU研究与设计[D].沈阳理工大学,2011.
[2] 莫易敏,章德平,周哲.PLC梯形图转化为指令表算法及实现[J].控制工程,2006(6).
[3] 保慧.PLC图形化编程系统的研究与实现[J].现代机械,2006(1).
[4] 伊君翰.基于多核的并行编程模型[D].复旦大学,2008.
[5] 汪前进,高勇,李存华.基于多核处理器的多任务并行处理技术研究[J].计算机应用与软件,2012(4).