基于AR嘞CAN总线的嵌入式PLC设计
扫描二维码
随时随地手机看文章
摘要:为实现PLC低成本,个性化的社会需求,提出一种嵌入式PLC设计方案,重点讨论了系统的总体构成以及软、硬件设计方法。系统采用ARM作为主控芯片,以CAN总线作为主要通信接口,结合嵌入式实时操作系统,保证了系统的可靠性和实时性。实验结果表明,该系统运行稳定,通信可靠,能够满足基本的工业应用需求。
关键词:可编程逻辑控制器;ARM;嵌入式系统;CAN总线
0 前言
可编程逻辑控制器(PLC),一种数字运算操作的电子系统,专为在工业环境应用而设计。它采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟输入/输出控制各种类型的机械或生产过
程,是工业控制的核心部分。随着工业技术的发展以及规模的不断扩大,传统的PLC面临着IO点数增多、通讯功能需要增强等诸多方面的挑战,已无法满足个性化、差异化的需求。
现有的设计主要有工控机、单片机板等。工控机在互连、表达、算法等方面优势明显,但其实时性、稳定性难以满足连续控制的苛刻要求,通常用于监控。单片机系统在成本控制上更加灵活,可是没有操作系统使其只能应用于低端场合。具有嵌入式操作系统的PLC将能结合两者的优点,成为PLC领域的主要研究方向。本文介绍以嵌入式芯片STM32和CAN总线相结合的方式进行嵌入式PLC设计,并采用μC/OS-II实时操作系统,利用其开放性、模块化和可扩展性的系统结构特性来达到高实时要求的PLC控制,在保证实时性的同时,实现多点位、复杂功能的PLC系统控制目标。
1 系统总体设计
系统总体设计框图如图1所示。本设计采用ST公司生产STM32F103RCT6作为系统的主处理器。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,它集成了两个CAN控制器,并为每个CAN控制器分配了256字节的SRAM,每个CAN控制器有3个发送邮箱和两个接收FIFO。它主要负责采集、处理开关量和模拟量输入,控制开关量输出,同时通过CAN总线完成与上位机的通信。
开关量的输入,为了减少外部开关对系统的干扰,首先在输入端用光电耦合器隔离,再由IO口分别读取12路通道的输入,读取的开关量可以存储在ARM的存储器内。ARM对开关量数据进行处理,一方面通过CAN总线将数据传输到上位机;另一方面将开关状态由LED实时显示输入开关量状态。对于13路的开关量输出,ARM通过CAN总线得到上位机传来的开关量输出数据,并且将数据进行处理,一方面通过控制继电器的锁存器将数据锁存,完成对继电器的开关控制;另一方面将开关状态由LED实时显示输出开关量状态。模拟量的采样则通过信号放大调理电路及相应的控制电路,然后对其进行A/D转换,转换后的数字量读入PLC系统的输入映像缓冲区,从而完成对模拟量的采集。
2 系统硬件设计
2.1 开关量输入输出模块
开关量输入电路的功能是接收工业现场各种开关量信号的输入,并将其转换成符合CPU要求的标准逻辑电平。为提高控制器的抗干扰能力,在开关量输入信号和处理器STM32之间使用光电耦器件TLP521隔离,当开关量输入信号受到干扰时,只要其共模电压低于光耦的最大隔离电压,就不会对处理器正常工作造成任何影响。
开关量输入电路如图2所示。其中X1为输入端,P1为微控制器端口,LED0为输入点的状态指示灯,TLP521为光电耦合器,它实现现场与PLC的CPU电气隔离,提高抗干扰性。
[!--empirenews.page--]
开关量输出电路是嵌入式PLC与外部连接的输出通道,PLC通过它向外部现场执行部件输出相应的控制信号。开关量输出通常有晶体管输出和继电器输出两种形式。本设计中,开关量输出电路采用了13路继电器输出,器件选用松乐SRD-24VDC-SL-C,继电器输出电路可用于直流负载,也可用于交流负载,它特别适合于对动作时间和工作频率要求不高的场合。其电路图如图3所示。D1为稳压二极管1N4148,因为直流继电器的线圈在断开时会产生反向电动势,这时需要在继电器两极并接一个1N4148来进行快速放电。
2.2 模拟量输入模块
模拟量输入电路的主要功能是把现场测量到的模拟量信号转变成PLC可以处理的数字量信号。A/D转换器是模拟量输入电路的主要器件,STM32微控制器内部含有8路10位A/D转换器,配合信号调理电路以及相应的控制电路,可以完成模拟量的采样和转换。转换后的数字量由CPU读入PLC系统的输入映像缓冲区,从而完成对模拟量的采集。
本设计中,模拟量输入电路有8路4~20mA电流输入。4~20mA直流信号制是国际电工委员会(IEC)制定的过程控制系统用模拟信号标准。在工业现场,如果采集的信号经调理后是电压信号并且进行长线传输,会产生以下问题:第一,由于传输的信号是电压信号,传输线会很容易受到噪声的干扰;第二,传输线的分布电阻会产生电压降。为了解决上述问题和避开相关噪声的影响,工业现场大量采用电流来传输信号。
2.3 CAN总线接口电路
CAN总线是一种支持分布式实时控制的串行通信网络,采用对通信数据进行编码的方式,使得CAN总线上的节点数量理论上几乎不受限制。然而实际上,CAN总线上的节点数量不宜超过100个。每一个嵌入式PLC通过CAN总线实现与上位机的通信,传输距离可达10km,通信速率高、可靠性高、抗干扰能力强。由于STM32F103X内部已集成CAN总线控制器,因此只需要外接CAN收发器即可,使得电路更加简洁而且成本更低,同时可靠性得以提高。CAN收发器采用TI公司的SN65HVD230供电电压为3.3V的CAN总线收发器,该收发器采用差分收发方式,最高速率可达1Mb/s,具有高抗电磁干扰、CAN总线保护、斜率控制等特点,电气连接简单,使用方便,完全满足工业级产品的技术要求。通信接口电路如图4所示。
3 系统软件设计
由于嵌入式PLC在工业控制方面的实时性和稳定性要求,选用μC/OS-II操作系统来管理任务调度。μC/OS-II是一个专为嵌入式应用设计,基于优先级调度的抢占式实时操作系统内核,它包含了任务调度、任务管理、时间管理、任务间通信与同步等功能。各任务之间通过信号量、邮箱和消息队列实现相互间的数据交换和同步。
本系统软件部分由下位机控制程序和上位机监控程序两部分组成。前者主要负责读取开关量和模拟量的输入数据,控制开关量输出,并且负责通过CAN总线将数据上传给上位机,以及接收来自上位机的命令;后者则通过人机交互界面来监控嵌入式PLC的状态。系统需要先完成μC/OS-II操作系统的移植,然后利用μC/OS-II操作系统提供的API函数以及ARM微控制器集成开发工具Keil开发嵌入式PLC系统的控制程序。[!--empirenews.page--]
3.1下位机软件设计
系统下位机软件采用模块化的设计方法,把整个系统分解为几个功能相对独立的比较小的程序模块,分别对实现各个功能的程序模块进行设计、编程和调试。根据不同模块在系统中的作用,嵌入式操作系统应实现多个不同优先级的控制任务。这些任务按照优先级从高到低分别为:接收计算机控制中心命令;采集和处理数据;发送数据到本地控制中心。系统启动流程图如图5所示。
CAN总线通信程序主要由三部分组成:初始化、发送数据、接收数据。CAN控制器的初始化流程是:首先将ARM中CAN控制器相关的引脚使能,然后对CAN控制器进行复位操作,设置CAN总线的通信波特率,最后初始化CAN控制器的工作模式。初始化之后便可以进行数据的发送与接收。CAN数据发送是将采集到的数据打包成符合CAN发送帧格式后,调用CAN发送数据函数进行发送。数据接收程序是从接收缓冲器读出数据,同时释放接收缓冲器并对数据做出相应处理,本系统中CAN总线数据接收程序采用中断法进行控制。数据发送和接收流程图如图6、图7所示。
3.2 上位机软件设计
上位机主要实现CAN总线通信、显示输入输出端口的状态等功能,可以接收下位机传输过来的数据,也可以发送命令控制下位机的输出。采用VC++6.0开发环境的MFC编程实现上位机界面编程及与嵌入式PLC之间的通信。实现界面如图8所示。
本文给出了基于ARM和CAN总线的嵌入式PLC系统的软硬件设计方法,实现了对12路开入量信号采集;13路开出量输出信号的控制;8路模拟量的采集。具有LED指示开关量状态、远程监控的功能。采用高性能嵌入式微处理器和嵌入式实时操作系统为核心,并使用稳定的工业现场总线,保证了系统的可靠性和实时性,达到了预期的设计要求。