基于PC-Based 的TwinCAT 数据接口研究

   2023-11-15 互联网1730
核心提示:    TwinCAT (The Windows Control and AutomationTechnology) 是德国倍福公司推出的基于PC-Based技术的工业控制软件,遵循I

  

  TwinCAT (The Windows Control and AutomationTechnology) 是德国倍福公司推出的基于PC-Based技术的工业控制软件,遵循IEC61131-3 标准, 可以采用5 种语言进行编程。TwinCAT 特有的用户应用程序为把用户应用程序集成在TwinCAT 实时环境下打下了基础。作为对UA ( User application)Control 的扩展, TwinCAT UA OCX 给Windows 程序(如Visual C++) 提供了访问用户应用程序服务器的接口。

  Visual C++贯穿了面向对象的程序设计思想,其核心是Microsoft 基本类库(MFC), 称之为“应用程序框架”。利用VC++进行编程,可以简单、快捷地实现人机交互界面, 实现数据采集, 实现对计算机端口的操作和实时控制功能[1]。利用VC++的优势结合TwinCAT, 可以更好地实施控制算法, 进行实时控制。

  1 基于PC- Based 技术的TwinCAT随着IT 技术的发展, PC 机越来越多地应用于自动化领域。PC 机在工业控制中的应用, 已经从完成上位监控、可视化人机界面,发展到用PC 机直接取代PLC 和NC/CNC 控制设备, 通过一个硬件平台同时完成实时控制、可视化、通信和网络等多种功能, 这就是PC-based 控制技术。

  个人电脑高速的CPU 和大容量的内存、硬盘使得PC-Based 控制方案在大规模的、具有大量过程控制和需要复杂数学运算的应用中具有一定优势。它能方便地与各种通用的通信网络和现场总线相连, 在I/O 硬件的选择上非常灵活; 所有这一切,使得PC-Based 控制进入了高速发展、广泛应用的新时代。先进、灵活、通用、开放、简便是PCBased控制方案最吸引人的地方。

  TwinCAT 工控软件是运行于Windows NT/XP 平台下的实时控制软件,可采用VC++, VB, Java 等多种语言进行复杂的程序设计, 该软件的最小运行周期可达50 靤。安装TwinCAT 软件之后,就可以将配备Windows NT/Windows XP 操作系统的PC 机提升为具备实时处理能力的控制器

  TwinCAT由实时服务器、系统控制器、系统OCX接口、系统工具箱、PLC 系统、CNC 系统、输入输出系统、用户应用软件开发系统(User Appl.)、自动化设备规范接口(ADS-Interface) 及自动化信息路由器(AMS Router) 等组成[2]。

  2 TwinCAT 提供给VC++ 的接口文件TcAdsDll.dll: 一个专用的动态连接文件。

  TcAdsApi.h: 自动化规范设备功能的声明头文件。

  TcAdsDll.lib: 动态连接库文件。

  TcAdsDef.h: 自动化规范设备的结构和内容声明头文件。

  3 VC++ 与TwinCAT 接口的实现使用VC++ 进行软件开发具有如下特点: 第一, 灵活性好, 效率高, 可以接触到软件开发最底层的技术。第二, 微软的MFC 库博大精深, 学会它可以随心所欲地进行编程。第三, VC 是微软的产品,与操作系统的结合更加紧密[3]。

  利用VC++来编制控制程序与实时监控画面,配合TwinCAT 进行现场设备的控制,可以更好地利用各种软件的优势。3.1 VC++头文件编写及定义输入输出变量在进行数据连接之前做一些必要的准备工作,在安装的TwinCAT 软件目录下直接找到TcAdsDef.h和TcAdsApi.h, 把这两个文件直接拷贝到VC++工程目录下, 在VC 程序里添加如下语句#include “TcAdsApi.h”

  #include “TcAdsDef.h”

  把TcAdsDll.lib 库用到VC++项目中, 在VC++工程里的菜单project→settings→link 中的Object/libarary modules: 下文本框中写入Tcadsdll.lib, 然后点“OK” 就可以添加进去。另外, 还需要在VC++编写的程序里面定义与TwinCAT PLC 相同的变量char Incom [] = {“MAIN.Incom”};char Outcom [] = {“MAIN.Outcom”};3.2 在TwinCAT PLC 控制程序里定义输入输出变量VAR_INPUTIncom AT%IW1: INT;END_VARVAR_OUTPUTOutcom AT%QW1: INT;END_VAR在这里定义输入变量Incom, 定义输出变量Outcom 必须与VC++里面的输入输出变量相一致。

  3.3 进行数据连接Nport=AdsPortopen (); OutcomPAddr=&Addr;nErr=AdsGetLocalAddress (Paddr);if (nErr)MessageBox (“Error: AdsGetLocalAddress”);Paddr->port=801;以上语句主要用来对TwinCAT PLC 的硬件平台进行物理地址映射, 找到固定的控制端口801。

  下面就对数据进行读写操作,读取与TwinCATPLC 对应的数据。

  void CPIDControlDlg:: ReadData (char addr [],short& data){char temp [20];strcpy (temp, addr);nErr = dsSyncReadWriteReq ( pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof (iHdlVar),&iHdlVar, sizeof (temp), temp);nErr = AdsSyncReadReq ( pAddr, ADSIGRP_SYM_VALBYHND, iHdlVar, sizeof ( data) , &data);}

  说明: AdsSyncReadWriteReq 函数是用来取得对应的PLC 变量的句柄,而AdsSyncReadReq 这个函数就是根据句柄来读取变量的值。

  将VC ++ 编制的控制程序计算出的数送给TwinCAT PLC 。

  void CcomControlDlg::WriteData (char addr [] ,short data){char temp [20];strcpy (temp, addr);nErr= dsSyncReadWriteReq (pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof (iHdlVar),&iHdlVar, sizeof (temp), temp);nErr =AdsSyncWriteReq ( pAddr, ADSIGRP_SYM_VALBYHND, iHdlVar, sizeof ( data) , &data);}

  在这些语句里面主要是利用AdsSyncWriteReq函数来根据句柄设定变量的值。

  下面的程序实现定时读取数据。

  void CcomControlDlg: : OnTimer ( UINT NIDEvent){static int iFlag=0;int temp;short mTempIncom;switch (nIDEvent)case 1: 处理ID 为1 的定时器, 每20 ms 读一个数UpdateData ();ReadData (Incom, mTempIncom);}

  利用以上语句就可实现程序间的数据传输。

  参考文献:

  [1] 肖力.Visual C++ 程序设计教程[M].北京:科学出版社,2004:25-26.[2] 谢佩军,计时鸣,张利.VC++ 与MATLAB 混合编程探讨[J].计算机应用与软件,2006,23(2):128-130.


 
举报收藏 0打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  隐私政策  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅