【PLC】PLC&PAC入门教程

前言

  最近上了一门课——《可编程控制器》,接触到很多新知识,觉得十分有趣,很有记录必要。同时也算是一个复习。

一、PLC概述

  所谓PLC,全称Programmable Logic Controller,即可编程逻辑控制器,但是由于现在的PLC已经不是只能处理逻辑控制的器件了,它的功能已经被扩展得非常广泛,因此人们往往称之为 “可编程控制器”
  PLC最早被使用在工厂中代替继电器逻辑,这样切换开关时再也不用改接线之类的繁琐操作,而是使用编程来进行控制,即所谓“可编程逻辑”,这样大大简化了工人的操作。随着技术的进步和使用需求的增加,PLC的功能逐渐扩展,如运动控制等。其中最为革命性的改变或许就是在PLC中加入了网络,即EtherNet/EtherCAT,这样实现了将多台PLC之间通过网络连接通信,不仅使其功能更加强大,其自动化程度也大大提高,因此,现在很多PLC属于 PAC(Programmable Automation Controller,可编程自动化控制器) 的范畴。但是为了统一称呼,我们现在还是称之为PLC。

1. PLC与单片机之间的区别

  看完这个简介,相信学习过单片机相关课程的同学第一反应估计是这个PLC和一般的单片机有什么区别。通过学习,我的看法是,二者其实区别不大。首先是CPU方面,之前很多PLC采用的CPU都是ARM的内核,目前比较高端的PLC还会使用酷睿的CPU,所以,单片机,计算机,PLC之间并不是泾渭分明,而是相互影响,互相促进。其次是使用性能方面,除了CPU之外,由于PLC的使用环境主要是工厂,因此它需要适应工厂中恶劣的环境,如电磁干扰、噪声、灰尘等,因此PLC一定要有非常完善的防干扰措施,这同时体现在硬件和软件方面。即可靠性要强于单片机,(很少出现程序跑飞的情况),因此PLC也贵得多。
  从开发者编程的角度,PLC的编程也相对简单,即它只需要根据不同的输入给出不同的输出即可,不存在很复杂的算法编程技巧。这一点会在后面的编程部分着重介绍。

二、PLC工作方式

  前面提到,PLC与计算机其实相差不是很大,确实,PLC设备采用的也是典型计算机的结构,即包含CPU,存储器,输入输出端口等基本模块。但是PLC的工作模式相对特殊,它是采用循环扫描的工作方式,这个工作过程一般包括五个阶段:公共处理、程序执行、扫描周期计算、I/O刷新、外围设备服务,如下图所示。
在这里插入图片描述
  执行这五个阶段一次称之为一个扫描周期,一些比较高级的PLC这个扫描周期十分的短暂,一般在纳秒级别。这样既能够适应快速系统,也能增强对慢速系统的抗干扰能力。
  以上表述的五个过程,如果忽略掉一些安全防范措施,可以将这个扫描周期分为两个主要的部分:程序执行和IO刷新

1. IO刷新

  PLC扫描周期中所谓的“程序执行”阶段,即是执行用户下载的程序,关键是理解什么是IO刷新。
  要了解IO刷新,首先要知道PLC的IO映像。PLC会在存储区域中开辟I/O映像区,对应与PLC连接的每个IO口,即所谓的,都有一个存储区域与之对应。也就是说外设信号发生变化时,只影响其对应的IO映像区,类似于DMA一样,直接和内存区域进行信息交换,不经过CPU,这样尽可能减少信号延迟和资源占用。
  那么对于CPU来说,它在执行程序需要使用外设的数据时,只需要去读取/写入外设对应的内存(IO映像区)即可,这样就实现了程序运行和外界之间的隔离。增强了PLC的抗干扰能力。
  再从整体上来看,PLC在运作时,就是不断读取内存中外部设备给入的信号,然后将这些数据代入到用户程序中去执行,然后再将输出的结果写入到对应外设的IO映像区中,然后就不管了,CPU开始休息。内存中的数据自然会输出到外设中。这样就完成了输入到输出的一次循环。

2. PLC的IO滞后现象

  所谓IO滞后,是指 当PLC的输入端信号发生变化,PLC的输出端对该输入变化做出反应需要一段时间。 这样初一看,似乎感觉是个必然的结果,一般的单片机处理外设信号都得要一点时间,这个确实,即使不考虑“干扰因素”(如滤波电容的时间常数,执行器件的响应时间等),也还需要考虑程序执行的时间,但是和单片机不同的是,PLC的工作方式固定是循环扫描,因此,其IO滞后时间就至少是一个扫描周期,其时序图如下图所示。
在这里插入图片描述

  关于IO滞后,最为关键的点还在于它对PLC编程的影响,因为梯形图是可以把输入输出变量当作条件的,这样其值的改变就可能差一个执行周期,可能就会导致程序逻辑错误。
  PLC的IO滞后现象可以说是编程中始终要记住的一个点,否则编程可能就会出错,就像是C语言中一定要区分“=”和“==”一样。

三、PLC编程

  学习PLC,一定要学PLC的编程,而学PLC的编程就像学单片机一样,必须得选择一款PLC作为实践对象,因为课程设置的原因,以下内容将以欧姆龙的NX1P为例表述相关内容。

PLC的编程本质上是差不多的,不用纠结于厂家和型号

1. PLC编程方法

  PLC的编程方法很多,还有可能和型号有关,但是常用的是以下这几种:

在这里插入图片描述

  其中,主要使用的语言还是梯形图语言(Ladder)和结构文本语言(Structure Text),所谓功能块语言(Function Block),可以把它看作一个函数,编程时也可以使用梯形图或结构文本去自定义功能和功能块。

2. 梯形图

  梯形图的编程方式是在原继电器控制系统中常用的继电器、接触器的基础上演变而来的。

在这里插入图片描述

这样就可以大大方便原先习惯继电器控制的技术人员理解和使用梯形图。
  上图中,左右两条长竖线为左右母线,没有实际含义,用来表示程序从左母线运行到右母线,也可以不画。
  器件中,两竖代表的是继电器,是用来读取的值,加一斜杠代表取反。圆圈代表接触器,是用来输出的值。简单来说,上面这行程序表示当前面的继电器满足条件时,接触器输出高电平(有输出),否则输出低电平(无输出)。其中,两个继电器串联代表逻辑与,两个继电器并联代表逻辑或,即一个是同时满足一个是满足一个即可。
  以上图为例,当00000和01000这两个继电器任意一个为高时,且00001继电器为低时,输出01000为高电平,否则为低电平。
  通过上面那个例子,可以发现,其实每一行梯形图程序本质上就是一个条件语句,“当满足xxxx时,就输出xxxxx”。但是这个条件不仅可以是输入量,还可以是输出量,因为其本质是读取的IO映像区的值。然后条件之间可以进行逻辑运算。

  当然,在使用梯形图编程时,还需要注意以下几个点:

  • 1. 一个输出变量只能输出一次。这是初学者最容易忽略的问题,即一个线圈不能在两行程序中均出现。如下图所示。
    在这里插入图片描述这种程序可能编译不会报错,但是程序运行大概率会出错,得不到想要的输出。因为PLC的工作模式是循环扫描,只会根据你的内存中的值将输出值写入到输出映像中。所以上图两个条件对应一个输出,一旦一个条件不满足,其输出值就为低电平,虽然说程序执行是从上到下的,但是在快速扫描的过程中,这种顺序关系就会很模糊,所以程序一般设置为下面这种结构:在这里插入图片描述即将相同输出的条件相并,这样任意一个条件满足,其输出都为高电平。
  • 2. 输出只能并联,不能串联在这里插入图片描述在这里插入图片描述这个很容易理解,因为梯形图每一行都是一个条件语句,所以两个输出串联就会出现歧义,如果要两个输出值相同,应该将其并联。
  • 3. 每个寄存器的状态可以反复读取,即可以使用多个相同的条件作为判断条件。

3. 结构文本

  梯形图属于是图形化语言,虽然简单易懂,但不适合大量程序的开发,而结构文本就是一种类似于高级语言C语言的编程方式,它具有基本的赋值语句,迭代语句,条件控制语句等。例子可以参考下图
在这里插入图片描述

四、NJ&NX1P

  原来的PLC是各大厂商自己有一套标准,每个厂商都按照自己的标准来设计PLC的硬件和软件,但是,这样不利于整体的发展,因为任何一个模块坏掉了都得要原装替换,十分不方便,因此,在1993年12月,国际电工委员会(IEC)联合各大厂商,一起协商制定了一个国际标准—— IEC61131-3

  这个标准是当年各大厂商相互妥协之后定下来的,规定了PLC中指令系统的标准。而为了适应这个国际标准,同时也是为了适应新时代的发展,欧姆龙在2011年发布了一款有别于它之前发行的CJ系列PLC—— NJ系列,紧接着又在2015年发布了一款mini版的 NX1P(便宜了很多),两款PLC都是基于IEC61131-3标准来设计的,而且各方面性能有了大幅提升,已经属于PAC的范畴了。

在这里插入图片描述

  而之所以选择这款PLC进行学习,也主要就是因为它符合IEC61131-3这个标准,相当于学习一种PLC就能了解很多种PLC,而接下来的内容也主要是符合这个标准的语法规则。

1. Sysmac Studio

  上面提到的NJ和NX1P这两个系列的PLC都是基于欧姆龙开发的配套软件Sysmac Studio来进行开发的,因此,有必要花一点时间学习一下这个软件。

(1) 软件概览

  Sysmac Studio软件界面如下图所示。
在这里插入图片描述
重点强调几个点:

  • 工具栏中的锤子状的按钮为编译按钮。其编译进度条在右下角,如果有报错,会在底下的编译窗口显示出来。(左边项目会有红色感叹号)在这里插入图片描述
  • Sysmac Studio本身还支持一定的仿真,点击“模拟->运行”,即可进入运行模式。在这里插入图片描述
  • 进入运行模式后,在右下角会弹出一个控制器状态的窗口,可以进行调试,调试时,可以看到程序执行的效果,变绿或不变绿,代表程序是否执行到,同时还可以点击设定的接点来设置True或者False或者其他值。在这里插入图片描述如果运行不正常,看一下是否选择了“在编程模式下运行”。
  • 工具箱中包含所有软件自带的功能和功能块,要善用它的查找功能,同时一定要注意功能块名字不能相同!

(2) 任务和POU

  所谓任务,按照IEC61131-3标准,任务是一种来执行用户需求的功能。比如IO刷新、执行用户程序都能称之为任务。一个任务可分配128个程序。任务是周期地循环执行,按照执行条件和执行优先级,可以将任务分为主周期任务周期任务,主周期任务优先级最高,每次循环都要执行一次,而周期任务只能在每个扫描周期执行完主周期任务剩下的时间去执行,如下图所示。
在这里插入图片描述
  那什么是POU呢?根据标准,程序组织单元(Program Organization Unit,POU)是用户执行模型里面定义的单元,是一个独立的单元,分为程序、功能块和功能。从Sysmac Studio中也能看出来,如下图所示。一个POU包含了程序(可以有多个)、功能和功能块(都可以自定义)。
在这里插入图片描述

(3) 功能和功能块

  对于功能和功能块,初学者总是傻傻分不清楚。为方便理解,对照C语言中的函数来讲,所谓功能(Function,FC)就是普通的函数,你调用时传递的是参数的值,该函数本身是不占用内存的,即用完就会释放掉,属于读写临时内存,所以一般输入相同,其输出也相同;但是功能块属于是带有静态变量的函数,即不管你调用与否,这个函数就占用了一定的存储空间,所以你在二次调用时,只要上一次的数据没有被改变,那么再次执行就能沿用上次的数据。所以就有可能存在输入值相同,但是输出值不同的情况
  从程序调用中来看,功能和功能块没有什么很大的区别,但是有一点需要 格外注意功能是不用加名称的,即变量只有类型,没有变量名;但是功能块一定要加名称,除类型名外还要加变量名,否则编译报错,而且变量名还不能重复!否则即使编译不报错,但程序执行大概率会有问题,所以复制粘贴的时候要谨慎
  参考:功能与功能块的区别

  此外,如果需要自定义功能块或者编写ST文本时,需要注意公用变量的问题,如下图所示。
在这里插入图片描述

(4) 变量及数据类型

  在Sysmac Studio中,变量类型之间有严格的界限,不能混用。其常见的类型如下图所示。
在这里插入图片描述
之所以说严格,就在于虽然“整数属于实数”,但是UINT类型的却不能传给REAL类型的参数。

  • 常量的表示方法
      在使用梯形图或ST编程时,经常要用到各种数据类型的常量,而Sysmac Studio中要表示某一种数据类型的常量时,要注明数据类型。如 “UINT#2” 表示一个UINT类型的数据,值为2;再比如 “BYTE#10#23” 表示一个BYTE类型的常量,用十进制表示值为23(默认进制为10进制)。
  • 数组表示方法
      有时候需要使用到数据数据时,也需要在变量类型中注明,如下图所示。在这里插入图片描述
    其中,要注明数组的数量,从0开始,而且编辑时要善用该软件的文本联想提示,辅助输入。在这里插入图片描述
    数组变量在使用的时候,直接在变量名后加上[i]即可,和C语言基本一样。

2. 梯形图

  梯形图的使用方法参考前文PLC编程节,NJ和NX1P的梯形图编程和这个基本一样。
  但需要注意几点:

  • 梯形图中也可以嵌入ST文本,当作一个“功能”,一般在大量赋值操作中会使用。
  • 梯形图的输入和输出有多种选择。如输入可以选择上升沿触发,输出也可以采用set和reset实现置位输出或复位输出。 同时,如果逻辑恰好相反,还可以使用反转操作,但一般只用在输入端。
    在这里插入图片描述
    在这里插入图片描述
    设置和重置指令是当前面的条件有效时,置位/复位,当前面的条件无效时,信号保持。
  • 梯形图最基础的指令十分简单,关键在于其自带功能块的使用和自定义功能块,但是由于自带的功能块太多,建议是备好使用手册,随用随查。

3. 结构文本

  结构文本的特点如下图所示:
在这里插入图片描述
  其语法如下图所示。
在这里插入图片描述
在这里插入图片描述
  举个例子:
在这里插入图片描述

五、运动控制模块

附:对插补的理解
其他有缘再写。

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录无知岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值