专于精益高科技电子产品反向软硬件研发
为客户提供产品定制开发、产品性能检测及售后服务等一列的解决方案

服务热线

+086-0755-82815425
+086-0755-83035836

基于工业PC的软PLC控制系统实现2009年09月21日

  由于工业PC/软PLC控制计算机软、硬件技术的迅速发展以及工控领域国际编程标准--IEC 61131-3的制定和推广应用,在工业PC上以软件技术实现PLC的功能,即软PLC技术,成为一项新兴的技术。
  1、基于PC的软PLC控制系统的发展现状
  1.1 IEC 61131-3国际编程标准
  IEC 61131国际标准的制订是软PLC技术发展的一个重要基础。为了规范工业控制领域的编程语言,20世纪90年代初,IEC(国际电工委员会)颁布了IEC 61131国际标准。该标准工业PC/软PLC控制共分八个部分,依次包括:基本概念、硬件装置和测试、编程语言标准、用户指南、通信服务规范、现场总线通信(未公布)、模糊控制语言和编程实施方针。其中IEC 61131-3是PLC编程语言标准,它详细地说明了句法、语义和5种编程语言:指令表(Instruction),结构化文本(Structured Text),顺序功能图(Sequential Function Diagram),梯形图(Ladder Diagram),功能块图(Function Block Diagram)。在这五种编程语言中,指令表工业PC/软PLC控制和结构化文本是文本语言,易于实现一些复杂的算法;顺序功能图、梯形图和功能块图是图形语言,它们则擅长处理逻辑控制。同时该标准还允许在同一项目中,使用多种语言进行混合编程,而且支持POU(程序组织单元)的重复使用,为工业PC/软PLC控制不同知识背景的编程人员提供了方便。
  1.2 基于PC的软PLC控制系统的发展现状
  目前,国外许多工业PC/软PLC控制工业控制系统开发商正在发展基于PC的控制系统,推出了符合IEC 61131-3标准的产品。在国内市场上常见的控制产品有:法国CJ International公司的ISaGRAF,德国KW公司的MULTIPROG,BECKHOFF公司的TWinCAT以及SOFTPLC公司的SoftPLC等。作为典型的基于PC的控制系统,西门子工业PC/软PLC控制公司的WinAC在国内得到了广泛的应用。
  1.3 基于PC的软PLC控制系统的优点
  软PLC基于PC机,建立在PC机的软、硬件平台之上,因此具有PC机的优点和PLC的特性。
  *具有良好的开放性。全面支持Windows、Linux等操作系统,通过OPC或DDE等通信方式易于与第三方的产品集成运行。其硬件结构不再封闭,用户工业PC/软PLC控制可以选择不同的I/O模块来满足自己的要求。
  *具有广泛的兼容性。软PLC的技术是基于IEC 61131-3标准的,用户在掌握了标准语言后,开发比较容易。由于该标准继承了传统PLC的编程方式,因此不同知识背景的工程人员容易接受和使用。
  *可以节省投资。与传统的PLC解决方案相比,基于PC的软PLC由于其良好的开放性和兼容性,可以大大减少设备投资和系统的集成费用。
  *性价比日益提高。PC处理器的速度工业PC/软PLC控制日益提高,充分利用CPU的超强速度容易实现数据处理、多回路调节和多任务。
  基于以上原因,许多学者就软PLC控制系统的实现方案作了相应的探讨,在此,笔者设计了一种基于工业PC的软PLC控制系统。
  2、基于工业PC的软PLC控制系统的实现
  2.1 系统的硬件结构搭建
  该软PLC控制系统的硬件平台选用的是凌华PACK-610工业计算机,I/O板卡分别选用的是研华公司的PCI-1710,PCL-720和中泰公司的PC6311。在工业PC中可以驱动多块板卡,根据被控对象而定
  2.2 软PLC系统的软件实现
  该软PLC系统由编程系统和运行系统构成。编程系统用来完成PLC应用程序的开发,运行系统负责对整个系统的管理和对应用程序的执行。由于工业PC/软PLC控制编程系统和运行系统运行于同一台工控机,所以两者之间的通信采用了动态连接库(DLL)函数的方法实现数据交换。
  图2 软PLC系统框图
  (1)编程系统
  按照IEC 61131-3的标准,编程系统工业PC/软PLC控制中提供了对整个工程的管理、资源配置和POU(程序组织单元)的编辑调试功能。POU包括程序、功能块和函数,其中程序可以调用程序、功能块和函数;功能块可以调用功能块和函数;函数可以互相调用。
  工程管理功能提供了整个工程所需文件的管理,在这个工程中可以同时用五种语言编程来实现控制功能。POU编辑功能包含两个窗口:一个是工业PC/软PLC控制变量定义窗口,在此用户可以声明POU所需的元素,这些变量包含局部变量、外部变量,而且用户还可以声明相应的功能块和函数的名称。另外一个窗口则是程序的编辑窗口,用户在此可以编辑图形语言的程序和文本语言的程序。此外,在编程系统中还可以嵌入复杂的控制算法,如智能PID算法等。
  调试工具栏包含编译和调试功能:编译功能是将用户创建的图形或者文本程序编译成运行系统可以执行的目标代码,同时也提供了语法语义的检查功能。就调试功能而言,用户可以下载程序,而且可以在线仿真和调试。
  (2)运行系统
  运行系统的主要功能有三个:与编程系统的通信、目标代码的执行和各种I/O硬件的驱动。
  为了便于软件的日后维护和升级,将运行工业PC/软PLC控制系统和编程系统分开,以便于移植到不同的硬件平台。两者的通信依靠动态连接库提供的函数,以下是动态连接库提供的函数:
  PlcNetInitialize(); // 通信初始化
  PlcNetShutDown(); // 关闭通信
  PlcNetSendData();// 接收数据
  PlcNetRecData();// 发送数据
  PlcNetGetRxStatus();// 得到通信就绪信号
  在运行系统的工程中加入动态连接库的导入库文件IPCDrv.lib,这样就可以在运行系统中调用这些库函数了。当程序运行时,即可启动编程系统和运行系统的数据交换。
  软PLC运行系统虚拟机是运行系统的核心,也是整个软PLC系统的核心。它一方面负责处理操作系统的服务请求,另一方面对应用程序进行管理工业PC/软PLC控制和执行。程序执行时,首先为应用程序分配内存,将程序加载到分配好的内存里,然后在虚拟机中解释并执行编程系统下载的目标代码。该运行系统虚拟机支持IEC 61131-3标准规定的100余种函数、功能块和操作符。使用虚拟机技术,可以方便地将运行系统移植到不同的硬件平台。
  运行系统的I/O驱动模块直接驱动具体的硬件。为了完成与I/O模块的数据交换,运行系统在内存中开辟了一个段表,称为I/O映象区域。这个I/O映象区域在编程系统和运行系统之间起一个桥梁的作用,其作用是将编程系统定义的某一个地址的物理变量直接映射到段表的某一个地址,并根据这个地址的偏移量来操作具体的硬件。
  这个段表分成四段,依次为:段头(header),输入区(input),输出区(output)和标志区(maker)。段表的段头占用6个字节(byte),从0到5,定义了整个段的长度,输入和输出各占用的字节数等。输入区从6开始,也就是输入区的偏移量(offset)是6,如果将输入的变量值放在输入区的第1个字节(byte),则该变量的地址是7。如果输入区的长度占有2个字节数,则输出区的偏移量是8,这样输出变量工业PC/软PLC控制的地址应该加上偏移量8。标志区(maker)则用来存放中间变量。
  I/O驱动模块中提供了四个函数,依次为:
  LzsEnvInitialize (void);// 初始化过程
  LzsEnvShutDown (void);// 关闭过程
  LzsEnvWriteProcImg ();// 写过程映象
  LzsEnvReadProcImg ();// 读过程映象
  按照上面的原理,以研华板卡PCI-1710为例,为了读写编程系统中定义的三个变量(地址分别为%IX0.5、%IX1.6、%QX0.7)其主要代码如下:
  LzsEnvReadProcImg()
  {
  ptDioReadBit.port = 0; //读输入区的第零个字节
  ptDioReadBit.bit = 6; //读输入区第零个字节的第六位,编程系统中的地址为%IX0.5
  ptDioReadBit.state = &usState; // 返回值
  dwErrCde = DRV_DioReadBit(lDriverHandle, (LPT_DioReadBit)&ptDioReadBit);
  *((LZSBYTE*)pProcImgSeg_p+0) = usState;
  }
  写过程映象,也按照上面的方法。整个系统在Visual C++6.0环境下开发,目前,已对多个试验对象实现成功控制。
  3、应用实例
  按照以上的系统构建方案,控制对象既有开关量又有模拟量,分别为五层电梯模型和三容液位水槽。
  (1)对于电梯模型的控制而言,主要涉及到开关量信号,故采用梯形图编程语言。以研华公司的PCL-720板卡为I/O硬件,PCL-785B继电器板卡将信号放大,已对五层电梯模型实现控制。
  (2)三容液位水槽是一个强耦合、变结构的复杂被控对象,在此采用了PID算法。由于结构化文本是一种类pascal语言,擅长一些复杂算法和模拟信号的控制,故采用结构化文本语言,以中泰公司的PC6311板卡作为I/O硬件,应用PID算法对三容液位水槽实现成功控制。部分代码如下:
  VAR
  t : ton;
  t_in,t_out : bool;
  aoutport0_1 :REAL AT %QX2.0;
  ain_1 :REAL AT %IX6.0;
  END_VAR
  //以上声明了中间变量和输入输出变量
  if now_f < 2.0 then
  now_control := 4.96;
  aoutport0_1 := now_control;
  else
  if now_f < 2.64 then
  now_control := k_p * now_e;
  aoutport0_1 := now_control + 1.01;
  else
  control_error_p := k_p * (now_e - past_e);
  control_error_i := k_i * now_e;
  control_error_d := k_d * (now_e - 2.0 * past_e + ppast_e);
  control_error := control_error_p + control_error_i + control_error_d;
  now_control := control_error + past_control + 1.01;
  end_if;
  end_if;
  //以上是PID算法

微信扫描二维码咨询