聊聊身边的嵌入式,工控大脑PLC

简介: 聊聊身边的嵌入式,工控大脑PLC

以下主要内容来源于笔者前同事Mr Yang,经作者授权整理后发布。

1. 哪里用到PLC?

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

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

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

2. PLC和单片机关系

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

3. PLC的软件实现

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

3.1 IEC61131-3

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

指令表(ILD)

梯形图(LD)

功能块(FBD)

结构化文字(STL)

顺序功能流程图(SFC)

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

3.2 PLC的软件构成

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

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

                                               

(截图代码源于和利时G3小型PLC)

(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上运行
  • 由于容易做到地址无关,更容易做到无扰下装
  • 容易实现反编译功能

编译型 解释型
执行效率
开发难度
跨平台运行
反编译源文件 一般
无扰下装
防克隆

如果觉得文章不错,点个赞或者在看支持一下吧。

相关文章
|
Linux 网络安全 Docker
windows ssh连接docker 容器
windows ssh连接docker 容器
530 0
|
SQL 关系型数据库 MySQL
gin框架学习-Gorm入门指南
Snake Case命名风格,就是各个单词之间用下划线(_)分隔,首字母大写区分一个单词,例如: CreateTime的Snake Case风格命名为create_time
810 0
gin框架学习-Gorm入门指南
|
存储 Java 应用服务中间件
Tomcat 支持 PFX 格式和 JKS 两种格式的证书区别
【10月更文挑战第2天】Tomcat 支持 PFX 格式和 JKS 两种格式的证书区别
768 3
|
人工智能 自然语言处理 算法
【AI问爱答-双十一返场周直播】AI产品专家直播解读重点AI应用场景怎么用?
阿里云【AI问爱答】栏目强势回归,11月25日至28日每晚19:00,连续四天直播,涵盖AI营销、企业办公、社交娱乐及大模型推理调优四大主题,助您深入了解AI应用,解决实际问题。欢迎预约观看!
517 12
|
存储 缓存 移动开发
|
存储 自然语言处理 IDE
Bazel 与 Gradle 构建工具差异对比
Bazel和Gradle强调构建体验的不同方面。在某种程度上,它们的侧重点是互斥的——Gradle对灵活性和非突出性的要求对它的构建结构进行了限制,而Bazel对可靠性和性能的要求产生了强制不可协商的限制。
474 0
|
开发框架 Ubuntu 编译器
学习Qt之基础篇——从入门开始(1)
Qt 简介 Qt是一个跨平台的C++应用程序开发框架,被广泛用于开发GUI程序。 Qt有丰富的 API且面向对象。Qt是自由且开放源代码的软件,在GNU较宽松公共许可证条款下发布。支持广泛的编译器,包括GCC的C++编译器和Visual Studio。
444 0
学习Qt之基础篇——从入门开始(1)
|
消息中间件 JavaScript 小程序
领域驱动设计(DDD)的几种典型架构介绍
领域驱动设计(DDD)的几种典型架构介绍
|
JSON 数据格式
解决报错信息之:SyntaxError: Unexpected token R in JSON at position 0
解决报错信息之:SyntaxError: Unexpected token R in JSON at position 0
939 0
|
存储 JSON 数据格式
Threejs加载城市obj模型,加载人物gltf模型,Tweenjs实现人物根据规划的路线运动
Threejs加载城市obj模型,加载人物gltf模型,Tweenjs实现人物根据规划的路线运动
1195 0
Threejs加载城市obj模型,加载人物gltf模型,Tweenjs实现人物根据规划的路线运动