本章首先介绍了现有
PLC
系统的概况,然后提出了本文设计的通用工业控制器的
整体方案架构,分析了硬件和软件上需要实现的功能,最后对各部分功能进行分析并提
出具体的实现方案。
2.1 PLC
系统简介
可编程逻辑控制器(
Programmable Logic Controller
,
PLC
)是以微处理器为基础,
综合了计算机技术、自动控制技术和通讯技术而发展起来的一种新型、通用的自动控制
装置
[14]
。它采用一类可编程的存储器,用于其内部存储程序、执行逻辑运算、顺序控制、
定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入
/
输出控制各种类型
的机械或生产过程,是工业控制的核心部分
[15]
。
西门子
S7-200
系列的
PLC
就是整体式
PLC
,图
2-4
是其中一款
PLC
基本单元内部
结构图,其结构由三部分组成:上面部分是核心板即
CPU
,其中包含拨码开关、扩展单
元接口;中间部分是接口板,包括
I/O
接口、
RS485
通讯接口、
220V
交流电源输入接口、
24V
直流电源输出接口等;下面部分是开关电源板,
220V
交流输入,24V 直流输出。
2.1.3 PLC
的软件系统
PLC
的软件包括系统程序和用户程序。系统程序是固化在中央处理器芯片内部的的
程序,用户不能直接对其进行更改操作,系统程序包含异常状态的检测、
I/O
单元的操
作、用户程序的执行、与外界的通信等功能。用户程序是用户使用与
PLC
控制器配套
的开发软件所开发的程序,最常用的开发语言为梯形图语言(
LD
),此外还有指令表语
言(
IL
)、功能模块图语言(
FBD
)、顺序功能流程图语言(
SFC
)、结构化文本语言(
ST
)。
对于用户来讲,不必详细了解系统程序,只需根据实际生产需求编写用户程序,实现逻
辑控制即可
[28]
。
在编辑梯形图时会经常用到许多现成的功能块,如定时器模块、计数器模块、高速
计数器模块、模拟量输入模块、模拟量输出模块、
PID
模块、通信模块等功能块,这些
功能块的实现过程都包含在系统程序内,用户程序在使用这些功能块时只是调用了这些
实现过程
[29]
。
2.2
整体方案架构
本文采用整体式
PLC
结构,如图
2-7
所示,整体结构分为主控制器和远程模块,主
控制器由核心板、接口板、开关电源构成,集成中央处理单元(
CPU
)、
I/O
单元、电源
于一体。远程模块作为扩展模块,作用于面积大、范围广的工业现场,以便主控制器需
要控制距离较远的现场设备,同时能够为主控制器增加
I/O
点数,使控制器能够向大型
化、多功能方向靠拢。远程模块主要包括数字量输入模块(
DI
)、数字量输出模块(
DO
)、
模拟量输入模块(
AI
)、模拟量输出模块(
AO
)和以太网通信模块(
EN
),其中以太网
通信模块主要负责与主控制器通信,将各个远程模块的状态与数据发送给主控制器以及
接收主控制器发来的控制命令。
本文设计的控制器主要实现以下结构和功能:
硬件方面:硬件
PCB
板需包含核心板、接口板、开关电源、以太网通信模块、数
字量输入模块、数字量输出模块、模拟量输入模块、模拟量输出模块。接口板上需要包
含数字量输入输出接口、模拟量输入输出接口、数字量高速输入输出接口、高速
USB
通信接口、
RS485
通信接口、以太网通信接口等。
软件方面:
modbus
通信协议,作为主控制器与远程模块通信时的数据协议;远程
模块内部通信协议,作为各个远程模块之间通信时的数据协议。设计模块化控制功能,
包括工业现场经常使用到的运动控制和过程控制,同时会用到
PID
控制算法,如果需要
驱动变频器或者逆变器,还会需要用到
SPWM
算法、
SVPWM
算法。设计高速计数器
模块,用于采集旋转编码器之类的传感器信号。设计人机交互界面,便于现场工人操作
控制器。设计用户程序的编程语言,作为人类自然语言与底层芯片编程语言之间的桥梁,
方便没有任何编程语言基础的普通工人进行现场编程和测试工作。
2.3
主控制器方案设计
主控制器的总体方案设计如图
2-8
所示,分为核心板、接口板、开关电源。
信迈提供STM32+FPGA的运动控制解决方案。
主控制器几乎所有的对外接口都设计在接口板上,只有连接本地扩展模块的接口设
计在核心板上。 由于主控制器的体积有限,因此所包含的接口数量、
I/O
点数有限,如
需更多的
I/O
点数需要以太网接口连接远程模块来使用。主控制器上对外接口包含
16
路数字量输入接口、
16
路数字量输出接口(继电器输出)、
8
路数字量高速输出接口(晶
体管输出)、
220V
交流电源输入接口、
24V
直流电源输出接口、高速
USB
通信接口、
RS485
通信接口、以太网通信接口。在主控制器内部,开关电源与接口板相连,接口板
将从外界输入进来的
220V
交流电源输入到开关电源板,然后经过开关电源后会得到稳
定的
24V
直流电源。接口板与核心板相连,一是将
24V
经过
DC/DC
降压后得到的
5V
电源传递到核心板,二是与核心板上的控制芯片进行
I/O
信号的传递以及串口通信。
2.3.1
核心板方案设计
核心板的硬件结构包括控制芯片电路、下载电路、晶振电路、复位电路、芯片电源
电路、
RS485
通信电路、状态选择电路、状态指示电路、
I/O
指示电路、电平转换电路
等。
控制芯片采用目前较为流行的“
MCU+FPGA
”的方式进行控制
[32]
。
MCU
是微控制
单元(
Micro Controller Unit
),又称单片微型计算机或单片机,是将中央处理器、内存、
计数器、
USB
、
A/D
转换、
UART
、
PWM
、
DMA
等周边接口集成到一片芯片上,形成
芯片级计算机,应用于手机、遥控器、汽车、机械臂等控制领域。
FPGA
是现场可编程
门阵列(
Field Programmable Gate Array
),它是专用集成电路中的一种半定制电路,通
过编程对底层逻辑门阵列进行组合,从而实现内部各模块之间以及
I/O
之间的连接方式。
FPGA
具有以下优点:并行度高,可以支持多个模块同时进行独立的计算;可定制,即
通过编程实现自己的逻辑电路,并且可以无限次编程;运算速度快,通常情况下任务在
硬件上跑比软件上跑得要快,比如比较一个
64
位数高
32
位和低
32
位的大小,在
CPU
下需要
2
条区数指令,两条位与指令,一条移位指令一条比较指令和一条写回指令,而
在
FPGA
下只要一个比较器就行了。
FPGA
同时也存在着缺点,所有功能均依靠硬件实
现,无法实现分支条件跳转等操作,同时诸如
A/D
转换、
flash
等外设很少,这正好能
够靠
MCU
来弥补。因此本文利用
MCU
和
FPGA
组合的方式,能够最大的发挥两者各
自的优势
[33]
。
MCU
选择意法半导体集团开发的
32
位
STM32
微控制器,该芯片是基于
ARM
Cortex-M
处理器内核的嵌入式单片机,有着集成度高、低功耗等特点。
FPGA
选择
ALTERA
的
Cyclone IV
系列芯片,该系列芯片在
Cyclone
、
CycloneII
、
CycloneIII
的基
础上提升了性能并降低成本。
STM32
利用其自身丰富的外设作为主控芯片,使用
UART
与外界通信;
FPGA
利用运算速度快、并发性好的特点,对
I/O
信号进行处理。
STM32
和
FPGA
之间的通信方式有串行通信、并行通信以及共用存储器通信。串行通信所需引
脚少,但是速率没有另外两种通信方式快;共用存储器通信方式在硬件线路上较为复杂,
一般用在数据交换量较大的场合,用在这里有点大材小用;并行通信虽然占用引脚较多,
但是通信效率高
[34]
。综合来看选择并行通信方式。
电源电路需要根据控制芯片所需电压来决定,核心板上选择的控制芯片
STM32
的
具体型号为
STM32F103ZET6
,工作电压为
3.3V
,
FPGA
的具体型号是
EP4CE6E22C8
,
工作电压为
3.3V
、
2.5V
和
1.2V
。
STM32
的下载方式包括
SWD
和
JTAG
方式,
SWD
模式比
JTAG
在高速模式下面更
加可靠,在大数据量的情况下面
JTAG
下载程序会失败,但是
SWD
发生的几率会小很
多,并且
SWD
需要的引脚数量少,可以节省
PCB
空间。
STM32
虽然有
8MHz
内部晶
振,但是精度没有外部配置的高速晶振精度高。外部晶振有高速晶振和低速晶振两种,
典型的低速晶振为
32.768KHz
,高速晶振可选择
4~32MHz
,然后可以经过锁相环设置将
主频升至
72MHz
。核心板上需要预留的扩展模块接口用于连接多个扩展模块,而与扩
展模块之间的通信方式这里选择
RS485
通信,因为
RS485
支持一主多从模式。同时
STM32
周围需要设计状态选择电路和状态指示电路,状态选择电路是用拨码开关作为
STM32
的引脚输入,状态指示电路是用
LED
作为
STM32
的引脚输出。
FPGA
没有片内
flash
,因此
FPGA
的程序需要存储到片外
flash
中,这里选择
EPCS4SI8N
作为
FPGA
的片外
flash
。
FPGA
的下载方式有
JTAG
模式、
AS
模式和
PS
模式。
AS
模式是将程序烧入到配置芯片
EPCS
中,
FPGA
每次上电时,作为控制器从配
置芯片
EPCS
中读取数据;
PS
模式是将
EPCS
作为控制器件,将
FPGA
作为存储器,
FPGA
上电时,
EPCS
会主动将数据写入到
FPGA
中,此模式可以实现对
FPGA
的在线编程;
JTAG
模式是最常用的一种模式,直接把程序烧录到
FPGA
的
SRAM
中,所以掉电后程
序会消失。
FPGA
在正常工作时,它的配置数据存储在
SRAM
中,加电时须重新下载。
在实验系统中,通常用计算机或控制器进行调试,因此可以使用
PS
。但是在实用系统
中,多数情况下必须由
FPGA
主动引导配置操作过程,这时
FPGA
将主动从外围专用存
储芯片中获得配置数据,而此芯片中
FPGA
配置信息是用普通编程器将设计所得的
.pof
格式的文件通过
AS
烧录进去。通过
JTAG
模式烧录
.sof
文件会将程序烧录到
SRAM
中,
但是通过文件转换,将
.sof
文件转换成
.jic
文件,通过
JTAG
模式烧录会将程序通过
FPGA
固化到配置芯片
EPCS
中,这样
FPGA
重新上电是会从
EPCS
中读取程序。本文最终考
虑到调试的方便性,所以选择了
JTAG
模式。
FPGA
的主频需要用到外部晶振,
STM32
内部有晶振的起振电路故可以用无源晶振,
但
FPGA
没有,所以
FPGA
外部只能接有源晶振,这里选择
50MHz
作为
FPGA
时钟源,
通过锁相环的倍频后可以得到高达
300MHz
的时钟。
FPGA
的引脚既可以配置为输入模式,也可以配置为输出模式,都是
3.3VTTL
信号,
FPGA
输入输出引脚直接控制
LED
,作为
I/O
指示灯,共
40
个,
16
个输入点、
16
个输
出点、
8
个高速输出点。核心板与接口板通过接插件接在一起,用来传递
I/O
点数据信
号,在
FPGA
与接插件之间还要接入电平转换芯片,在
3.3VTTL
信号与
5VTTL
信号之
间转换,并且电平转换芯片能够起到保护作用,避免
FPGA
引脚直接与外部连接
[35]
。
2.3.2
接口板方案设计
接口板的硬件结构包括光耦输入电路、继电器输出电路、晶体管输出电路、
RS485
通信电路、
USB
通信电路、以太网通信模块、
DC/DC
降压电路、与核心板和电源板的
接口电路等。
光耦输入电路用于对外部开关量信号的输入,一般
PLC
的输入模块由若干输入点
和一个公共端组成。如图
2-9
中
a)
和
b)
是
PLC
直流输入电路的两种不同形式,区别在于
当外部开关闭合时,
a)
中的电流从公共端
M
流出
PLC
(源型输入),
b)
中的电流从公共
端
M
流入
PLC
(漏型输入)。当开关闭合时,
PLC
内部光耦的发光二极管点亮,光敏三
极管饱和导通,再将该信号传送至中央处理器,认为有输入信号。
c)
和
d)
分别是
a)
和
b)
的多路信号结构。为了适应更多的现场设备,本文使用
e)
所示的混合型输入电路,光耦
选择双向输入型光耦,外部接线形式既能源型输入也能漏型输入。
2.5
软件方案设计
2.5.1
嵌入式操作系统
虽然嵌入式应用程序能够在芯片上直接运行,但是为了能够更加合理的调用多任务、
充分利用系统资源,本文采用在
STM32
上移植嵌入式操作系统的方案。目前常用的嵌
入式操作系统有
μClinux
、
μC/OS-II
、
eCos
和
FreeRTOS
。
μClinux
(
micro-control Linux
)是微控制
Linux
,同标准
Linux
相比,
μClinux
内核
小,但仍然继承了
Linux
良好的稳定性、可移植性,并具有强大的网络功能、出色的文
件系统、标准丰富的
API
以及
TCP/IP
网络协议等。在移植方面,由于
μClinux
是
Linux
针对嵌入式系统的一种改良,所以其结构比较复杂,目标处理器需要足够容量的外部
ROM
和
RAM
,对于
STM32F103
来说,移植此系统需要至少
512KB
的
RAM
空间,
1MB
的
ROM/FLASH
空间,而
STM32F103
仅有
256KB
的
FLASH
,所以需要外接存储器,
这就增加了硬件成本。并且
μClinux
结构复杂,移植难度大,实时性也差,不适合作为
本系统的移植方案。
μC/OS-II
是用
C
语言编写的一个结构小巧、抢占式的多任务实时内核。
μC/OS-II
最多支持
64
个任务,分别对应优先级
0~63
,其中
0
代表优先级最高,
63
为最低,系统
保留了
4
个最高优先级和
4
个最低优先级,所以用户可以使用的任务数有
56
个。
μC/OS-II
能够提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,
具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。在移植方面,
μC/OS-II
支持当前流行的大部分
CPU
,由于其本身内核小,最小代码仅有
2KB
,需要数据空间
仅有
4KB
的
RAM
,所以移植相对简单,只需要修改与处理器相关的代码即可,比较适
合在本系统上移植。
eCos
(
embedded Configurable operating system
)是嵌入式可配置操作系统,是一种
源代码开元的能够配置、可移植、面向深度嵌入式应用的实时操作系统。其最大的特点
就是内核可配置,采用模块化的设计方式带来的灵活的配置,核心部分由小同的组件构
成,通过
eCos
配置工具能够方便的配置内核、
C
语言库和底层运行包等组件,能够很
好的满足不同嵌入式应用需求。在移植方面,
eCos
内核小,最小代码仅有
10KB
,所需
数据空间仅有
10KB
的
RAM
,可移植性好,比
μClinux
和
μC/OS-II
都更加容易,但是
其应用并不广泛,资料没有
μC/OS-II
多,更适用于例如消费电子领域中的应用。
FreeRTOS
是一款完全免费并能够在小
RAM
单片机上运行的实时操作系统,具有源
代码开元、可移植性强、可裁剪、调度策略灵活等特点。
FreeRTOS
操作系统能够完成
任务管理、时间管理、信号量、消息队列、内存管理、记录等功能,可以满足一个最小
操作系统的基本需求。在移植方面,
FreeRTOS
能够方便的移植到不同处理器上,例如
ARM
、
MSP430
、
PIC
、
AVR
、
C8051F
等,
STM32
的内核就是
ARM
,所以
FreeRTOS
适合本系统移植,也是本文所采用嵌入式操作系统。
2.5.2
软件系统
软件系统由系统程序和用户程序组成。系统程序是固化在控制芯片中的程序,本控
制器由主控制器和远程模块构成,主控制器上有
STM32
和
FPGA
两个控制芯片,
5
种
远程模块为实现各自功能分别有一个
STM32
作为控制芯片,因此需要设计
7
套不同的
系统程序,编程语言包含
STM32
所需的
C
语言和
FPGA
所需的
Verilog HDL
语言。用
户程序的编辑本文设计了两套方案,一是设计一款
PC
端编程软件,通过
USB
端口下载
到主控制器
STM32
上的
flash
中,另一种是现场编程功能,即通过人机交互界面,利用
关键词让没有编程基础的普通用户能够编写简单的测试程序,方便现场调试
[36][37]
。
2.5.3
模块化功能
本文设计了模块化功能,运动控制和过程控制。运动控制经常用于机械、机床、机
器人、电梯控制等场合,用于驱动步进电机、伺服电机或交流电动机,此时需要控制器
产生相应的驱动信号,如驱动异步交流电动机需要用
SPWM
、
SVPWM
算法,同时运动
控制还会经常用到编码器来测量速度和位置,本文在软件上设计高数计数器功能。过程
控制经常用于冶金、化工、锅炉控制等场合,用于对温度、压力、流量等模拟量的闭环
控制,此时需要控制器实现
PID
算法。
2.5.4
通信协议
各个
PLC
厂商一般都有自己的通信协议,比如罗克韦尔的
PLC
都支持
DF1
协议,
GE
的
90-70
和
90-30
系列
PLC
支持
SNP
协议,西门子
S-200
系列
PLC
支持
MPI
、
PPI
等协议,施耐德
PLC
支持
Modbus
和
Modbus Plus
协议,欧姆龙
PLC
支持
Host Link
协
议,三菱
PLC
支持
CC-Link
协议,松下
PLC
支持
MEWTOCOL-COM
协议。这其中Modbus
已经不仅仅是
PLC
的通信协议,在许多智能仪表、变频器中也有应用,已经在工控领
域中得到广泛的应用
[38]
。本文选择
Modbus
作为主控制器与远程模块之间通信的数据协
议,上述的协议中
MEWTOCOL-COM
协议对外开放且简单,本文在其基础上做些更改
作为
RMEN
与
I/O
模块之间通信的数据协议,后称为
RM-COM
协议。
信迈提供STM32+FPGA的运动控制解决方案。