哪里用到 PLC?

大家逛商场、坐地铁经常会乘坐自动扶梯。通常情况下,没人乘梯的时候,扶梯会以一个低速节能方式运行。有人乘梯时,会自动平稳过渡到正常速度运行。我有个同学在世界第一大自动扶梯生产商迅达,听他说里面用的控制器就是 PLC。


PLC 广泛应用于钢铁、石油、化工、电力等工控领域,主要有以下原因:

 

  • 高可靠性。工控领域环境相对较恶劣,同时还需要稳定可靠的长时间运行,不能出错,毕竟很多时候一旦出错,那可是会造成重大损失的,不像消费电子领域,出了问题大不了重启一下。容易编程。对工程师的编程水平不需要那么高的要求,工程师可以专注在应用领域,节约开发周期。易于维护。模块化的设计,出了问题相对容易维护。

 

PLC 和单片机关系

PLC 其实是电气工程师手中的 MCU,当然大部分的中小型的 PLC 本身就是由 MCU 来实现的。讲到这里,会有很多小伙伴问,这俩家伙到底有什么区别?从研发的角度看,PLC 是把 MCU 有限的资源根据一定的规范设计出来的,具体的讲,MCU 的 IO 资源对应了 PLC 的输入输出,Core 对应了计算能力,RAM 对应了数据空间,FLASH 对应了程序空间。从用户角度看,由于不同的 PLC 厂商都遵循了相同的规范,同时它的功能往往是其实现 MCU 的子集,所以学习起来比 MCU 更加容易。下图中间黄色部分就是 MCU,PLC 是在其基础上增加了输入模块、输出模块、电源模块、编程器。

 

PLC 的软件实现

下面更多的会从软件方案角度出发来探究 PLC,主要还是针对嵌入式工程师,大家感兴趣也可以自己上手去实现一个简单的 PLC。

 

3.1 IEC61131-3

讲到 PLC 的软件实现,那就不得不提 IEC61131-3,它是 IEEE 制定的用于 PLC 的编程系统标准,定义了以下五种编程语言:

 

顺序功能流程图(SFC)


小型 PLC 由于功能简单,而且步长受限,往往最常用的是指令表和梯形图。STL 类似 C 语言,经常用于编写功能块,FBD/SFC 更加直观,经常用于复杂逻辑的顶层设计。

 

3.2 PLC 的软件构成

用过 PLC 的朋友都知道,通用的 PLC 都会提供一个 PC 端的软件用来编辑用户逻辑,比较常见的有西门子的 STEP7,3S 的 Codesys,KW 的 MULTIPROG,rockwell 的 ISaGRAF。所以,一般情况下,PLC 的软件由两部分组成:

 

(1) PC 端的编程软件,给用户提供编程调试环境


(2) 设备端的软件,而设备端的软件又分为 runtime system(后称 RTS)和用户程序(后称 POU)两部分内容。RTS 是 PLC 设备端的核心,主要有以下几个作用:

 

  • 实现通讯接口:包括与 PC 端软件通讯,与 IO 扩展模块的通讯存储并执行 PC 端生成的 POU 执行 IO 的输入输出

 

当然,也有一些微型 PLC 自带屏幕,无需 PC 软件,可以直接在屏幕上编程,比如西门子的 Logo 系列。


3.3  POU 的分类

PLC 的 RTS 从实现角度讲,分为两类:解释型和编译型,有点像学校里学习 VB 和 VC 的区别。编译型 PLC 生成的 POU 是可以执行的二进制代码,解释型 PLC 生成的 POU 是一个中间文件。

 

编译型 PLC

编译型 PLC 支持的 IEC61131-3 编程软件会根据用户的编程语言生成 PLC 可以执行的二进制机器代码,其有以下几个特点:

 

  • 执行效率高, 平均有效指令仅是解释型 PLC 的 1 /10 开发难度大,PC 端开发环境除了需要解析 IEC61131-3 相关语法,还需要涉及编译器、链接器、反编译、Mempry 地址分配等内容基于 MCU 开发 PLC 跨平台难度大,受限于 CPU 指令集影响,不同厂商 CPU Memory 地址分配不同,开发环境很难做到适配所有不同 CPU 的编译器反编译难度大

 

解释型 PLC

解释型 PLC 支持的 IEC61131-3 编程软件会根据用户的编程语言生成中间文件,CPU 会作为解析器来解析该中间文件,其有以下几个特点:

 

  • 开发容易, PC 端开发环境仅需要解析 IEC61131-3 相关语法并生成中间文件即可产品容易跨平台,由于开发环境生成的中间文件并不直接在 CPU 上运行,也很容易做到地址无关,所以很容易在不同内核的 CPU 上运行由于容易做到地址无关,更容易做到无扰下装容易实现反编译功能