<2012 12 25> 嵌入式工程师眼中的PLC

  PLC一般是给没有计算机基础的电气从业人员使用的计算机控制系统,其特点是整合了常见的外围部件(特别是隔离型GPIO、定时器、通讯模块等)、工业级(抗干扰性好,皮实)、编程语言直观(梯形图,一种类似继电器控制的图形语言)。

  对于PLC的编程语言,工业界有一些标准,主要有梯形图(LAD-LAdder Diagram)、顺序功能图(SFC-Seauential Fuction Chart)、语句表(STL-STatement List)、功能块图(FBD-Function Block Diagram)、结构化文本(ST-Structured Text)这五种。从本质上来看,PLC的这些编程语言最终需要转化为PLC使用的CPU的特定机器语言(编译执行或解释执行),因此也有使用C、Java这样的通用高级语言来给PLC编程的。  但是工业标准的语言其中的一些编程思想和编程习惯往往能够很好的适应工业应用的场合,对于传统的电气从业人员来说,适应性佳,也有很大的优势。

  研究西门子的STL语言指令集可以发现,这套指令集并不是传统的CPU指令集。从某种意义上来说,是一个CCCCCISC指令集(复复复复杂指令集),很多指令都是针对工业控制的常用形态添加的。ARM架构的RISC指令集是很小的,其实X86的CISC指令集也没有多大。  

 

ADC 带进位的32位数加法
ADD 32位数相加
AND 32位数的逻辑与
B 在32M空间内的相对跳转指令
BIC 32位数的逻辑位清零
BKPT 断点指令
BL 带链接的相对跳转指令
BLX 带链接的切换跳转
BX 切换跳转
CDP CDP2 协处理器数据处理操作
CLZ 零计数
CMN 比较两个数的相反数
CMP 32位数比较
EOR 32位逻辑异或
LDC LDC2 从协处理器取一个或多个32位值
LDM 从内存送多个32位字到ARM寄存器
LDR 从虚拟地址取一个单个的32位值
MCR MCR2 MCRR 从寄存器送数据到协处理器
MLA 32位乘累加
MOV 传送一个32位数到寄存器
MRC MRC2 MRRC 从协处理器传送数据到寄存器
MRS 把状态寄存器的值送到通用寄存器
MSR 把通用寄存器的值传送到状态寄存器
MUL 32位乘
MVN 把一个32位数的逻辑“非”送到寄存器
ORR 32位逻辑或
PLD 预装载提示指令
QADD 有符号32位饱和加
QDADD 有符号双32位饱和加
QSUB 有符号32位饱和减
QDSUB 有符号双32位饱和减
RSB 逆向32位减法
RSC 带进位的逆向32法减法
SBC 带进位的32位减法
SMLAxy 有符号乘累加(16位*16位)+32位=32位
SMLAL 64位有符号乘累加((32位*32位)+64位=64位)
SMALxy 64位有符号乘累加((32位*32位)+64位=64位)
SMLAWy 号乘累加((32位*16位)>>16位)+32位=32位
SMULL 64位有符号乘累加(32位*32位)=64位
SMULxy 有符号乘(16位*16位=32位)
SMULWy 有符号乘(32位*16位>>16位=32位)
STC STC2 从协处理器中把一个或多个32位值存到内存
STM 把多个32位的寄存器值存放到内存
STR 把寄存器的值存到一个内存的虚地址内间
SUB 32位减法
SWI 软中断
SWP 把一个字或者一个字节和一个寄存器值交换
TEQ 等值测试
TST 位测试
UMLAL 64位无符号乘累加((32位*32位)+64位=64位)
UMULL 64位无符号乘累加(32位*32位)=64位

  以一款仿S7-200的国产PLC为例(http://item.taobao.com/item.htm?spm=a230r.1.10.2.GTu2xH&id=12911303220),其完全兼容正版西门子的产品。它使用的CPU核心是NXP LPC2138,是一款ARM7TDMI-S架构的RISC处理器。我们知道,使用STEP 7软件进行PLC编程时,其所有形式的语言最终会转换成一个PLC指令集(SIMATIC/IEC1131),相当于一个专门为工业控制使用的汇编指令集。首先,这个指令集不是ARM的指令集,不能直接使用;其次,PLC的整个执行过程(In I/O扫描 --> 用户程序 --> Out I/O扫描),是需要操作系统控制的。因此,PLC标准指令集可能是被预先编译成ARM指令集,也有可能是操作系统实时解释执行的。由于ARM内核的主频其实是很高的(LPC2138可达300M),而工控的主频往往不到1M(计算量小),其实CPU负载应该很小,因此后者的可能性比较大。  这款PLC的PCB设计和结构设计从工艺上来说也很符合“皮实”的目标。

  

========================================================================

  下面是PLC编程语言的介绍:不同的商家的PLC有不同的编程语言,但就某个商家而言,PLC的编程语言也就那么几种。下面,以西门子PLC的编程语言为例,说明一下,各种编程语言的异同。其中,STL类似于汇编语言,ST类似于高级语言如pascal或C,其他都是图形化的,如LAD类似电气图,FBD类似数字逻辑图。

  1、顺序功能图(SFC-Seauential Fuction Chart)

  这是位于其它编程语言之上的图形语言,用来编程顺序控制的程序(如:机械手控制程序)。编写时,工艺过程被划分为若干个顺序出现的步,每步中包括控制输出的动作,从一步到另一步的转换由转换条件来控制,特别适合于生产制造过程。

  西门子STEP7中的该编程语言是S7 Graph。

  2、梯形图(LAD-LAdder Diagram)

  这是使用使用最多的PLC编程语言。因与继电器电路很相似,具有直观易懂的特点,很容易被熟悉继电器控制的电气人员所掌握,特别适合于数字量逻辑控制。

  梯形图由触点、线圈和用方框表示的指令构成。触点代表逻辑输入条件,线圈 代表逻辑运算结果,常用来控制的指示灯,开关和内部的标志位等。指令框用来表示定时器、计数器或数学运算等附加指令。

  在程序中,最左边是主信号流,信号流总是从左向右流动的。

  不适合于编写大型控制程序。

  3、语句表(STL-STatement List)

  是一种类似于微机汇编语言的一种文本编程语言,由多条语句组成一个程序段。语言表适合于经验丰富的程序员使用,可以实现某些梯形图不能实现的功能。

  4、功能块图(FBD-Function Block Diagram)

  功能块图使用类似于布尔代数的图形逻辑符号来表示控制逻辑,一些复杂的功能用指令框表示,适合于有数字电路基础的编程人员使用。功能块图用类似于与门、或门的框图来表示逻辑运算关系,方框的左侧为逻辑运算的输入变量,右侧为输出变量,输入、输出端的小圆圈表示“非”运算,方框用“导线”连在一起,信号自左向右。

  5、结构化文本(ST-Structured Text)

  结构化文本(ST)是为IEC61131-3标准创建的一种专用的高级编程语言。与梯形图相比,它实现复杂的数学运算,编写的程序非常简洁和紧凑。

  STEP7的S7 SCL结构化控制语言,编程结构和C语言和Pascal语言相似,特别适合于习惯于使用高级语言编程的人使用。

   以上几种编程语言是用的比较多的几种,其它用的相对较少,就不介绍了。

你可能感兴趣的:(2012)