1、TwinCATTwinCAT高级语言编程接口高级语言编程接口 1尚德明TwinCAT SoftPLC 工业软PLC分类:u实时运行核:使用操作系统的实时性自主研发实时核编程语言PLC程序执行机制和Windows应用程序的执行机制不同,Windows应用程序是通过消息机制触发,而PLC程序的执行时通过一个定时器自动定期触发。因此对于软PLC来说,定时器的精准直接影响PLC逻辑执行的准确性和效率。自主开发的实时核和操作系统依赖性小,更稳定,更准确。目前世界上主要有三家公司开发了实时核:Beckhoff,IntervalZero,TenAsys。目前我们公司的实时核还不对外开放,TwinCAT 3以
2、后将对外开放,对外开放就意味可以使用高级语言来编写PLC程序。目前TwinCAT系统中想使用高级语言来进行控制只能使用操作系统的实时系统通过R3IO来实现另外一种软PLC。u:编程语言n 计算机高级语言(如C+)(R3IO)n IEC 61131-3国际编程标准 2高级语言和下位的通讯方式高级语言和下位的通讯方式 上位用户界面和BECKHOFF 产品通讯主要方式: 实时非远程:R3IO 非实时远程:ADS通讯 ,Modbus,OPC 文档: R3IO: Information System-TwinCAT- TwinCAT R3IO ADS: Information System-TwinCA
3、T- TwinCAT System-TwinCAT Connectivity 3通讯方式比较通讯方式比较通讯周期: R3IO 通讯时间可以忽略,数据交换时间取决于定时器,CE试用BECKHOFF提供的TcTimer可以达到100微秒XP系统最小在1毫秒左右 ADS通讯时间在2-3毫秒左右.但是考虑到ADS Server的响应时间,一个命令周期可能需要200毫秒系统拓扑: R3IO是通过指针直接访问IO内存映像.本地操作(把它当成高级语言编写的PLC) ADS是网络通讯,可以是远程访问Modbus和OPC的性能和ADS在水平以下主要介绍ADS通讯 4ADS简介简介在Beckhoff TwinCA
4、T 系统中,各个软件模块(如TwinCAT PLC、TwinCAT NC、Windows 应用程序等)的工作模式类似于硬件设备,它们能够独立工作。各个软件模块之间的信息交换通过TwinCAT ADS 而完成。ADS(Automation Device Specification)即自动化设备规范,它为设备之间的通讯提供路由。在TwinCAT PC 和Beckhoff 的CX、BX、BC 系列控制器中都包含TwinCAT 信息路由器。因此各个ADS 设备之间都能够交换数据和信息。ADS 服务有TwinCAT服务程序提供,当PLC中需要调用操作系统功能时也是通过ADS命令来驱动TwinCAT服务来
5、完成(如文本文件读写,获取系统时间等)。基于ADS 的TwinCAT 系统构架如下图所示: 5ADS 通讯协议概述通讯协议概述 ADS协议处于网络通讯协议的应用层。 6应用层传输层Internet层网络接口层TCP/IP模型模型OSI模型模型TwinCAT ADS 设备标识每台TwinCAT ADS 设备都有各自不同的AdsAmsNetId 和AdsPort(端口号),以相互区别。AdsAmsNetId 是TCP/IP 地址的扩展,是TwinCAT Message Router,存在于每台TwinCAT PC 或Beckhoff CX、BX、BC 系列控制器中。例如:如果一台PC 的IP 地址
6、是“192.168.2.10”,那么它的AdsAmsNetId 就是“192.168.2.10.1.1”。当然,也可以对AdsAmsNetId 进行修改。每台ADS 设备(ADS Server)的AdsPort 都各不相同,且固定不变。而ADS 客户端(ADS Client)应用程序的AdsPort 则是可变的。不同ADS 设备的AdsPort 如下图所示: PC 控制器中的PLCRun-time system 1801Run-time system 2811Run-time system 3821Run-time system 4831自定义任务( Additional Task )Addi
7、tional Task 1301Additional Task 2302BCxxxx 控制器中的PLC800NC500 7ADS 通讯方式通讯方式ADS 设备之间的通讯有多种方式,不同方式有不同的特点。1. 一般的ADS 通讯(General ADS Services)- 异步方式(Asynchronous)ADS 客户端向ADS 服务器发送ADS 请求,同时客户端继续自己的工作。ADS 服务器处理请求后,把响应以Call-back 函数方式发给客户端。- 通知方式(Notification)ADS 客户端向ADS 服务器发送ADS 请求,ADS 服务器以Call-back 函数的方式不断向客
8、户端发送响应,直到客户端取消该请求。这两种通讯方式的效率高,但需求复杂的客户端程序。注意:每个的端口最多注册550个通知优点:不会造成系统堵塞缺点:不能确保每次请求都有返回比喻:发邮件 8ADS 通讯方式通讯方式2.特殊的ADS 通讯(Specific ADS Services)TwinCAT ADS 设备和Windows 应用程序(例如VB、VC 应用程序等)之间的通讯除了可以采用一般的ADS 通讯方式外,还可以采用特殊的通讯方式,即同步通讯方式。- 同步方式(Synchronous)ADS 客户端向ADS 服务器发送ADS 请求,在通讯过程中客户端程序停止执行,直到获得ADS 服务器返回的
9、响应。这种通讯方式不需求复杂的客户端程序,但其轮循的通讯方式给系统带来比较大的负载,因此通讯效率较低。优点:能即时返回结果缺点:如果通讯故障会造成系统堵塞比喻:通电话 9ADS API为方便各种计算机高级语言及其环境使用ADS通讯,Beckhoff TwinCAT提供相如下组件:ADS .NET Component 适用.NET平台,VB.NET,C#等 ADS-OCX (ActiveX COM控件)适用于Visual Basic, Visual C+, Delphi等. ADS-DLL适用于Visual C+等. ADS-Script-DLL适用于 VBScript, Jscript等脚本,
10、创建B/S架构的应用.JAVA DLL 适用于JAVA语言。 “PlcSystem.lib” PLC 库ADS设备可以通过据此和其他ADS设备以及Windows进行通讯。 10ADS 访问变量方式访问变量方式TwinCAT ADS访问变量有两种方式:1.地址方式地址方式一个PLC变量的地址由两部分组成:GroupIndex和OffsetIndex:GroupIndex一般用于区别寄存器类型,在TwinCAT ADS设备中为常量,具体内容可以参考Information System(后附常用的GroupIndex值)。OffsetIndex为变量的偏移地址,在PLC中为该变量的地址。2.变量名方
11、式变量名方式在TwinCAT ADS设备中每个变量都有一个句柄(Handle)。适用变量名访问变量首先需要得到该变量的句柄。(不同的高级语言方式略有不同) 11ADS组件库文件组成简介组件库文件组成简介 12ADS组件库集成在TwinCAT软件中,安装任何版本的TwinCAT软件都包含ADS通讯组件,如果用户希望在没有安装TwinCAT软件的计算机适用ADS通讯组件可以安装Supplement中的TwinCAT_ADS_Communication_Library此为免费产品。除需要复制到Windows/System32目录外绝大部分相关文件可以在TwinCAT安装目录找到。假设TwinCAT安
12、装路径为C:TwinCAT文件描述C:TwinCATADS ApiTcAdsDllADS DLL C:TwinCATADS Api.NET.NET组件(支持三个版本的Framework)C:TwinCATADS ApiAdsToJavaADS JAVA DLLC:TwinCATADS ApiCompactFramework.NET Compact Framework组件C:TwinCATADS ApiLib VS 97LibC:TwinCATADS ApiTcAdsWebServiceWebService组件C:WINDOWSsystem32AdsOcx.ocxADS OCXC:TwinCAT
13、TcScript.dllADS-Script-DLL如果可以建议用户最好用TwinCAT CP,ADS组件出了配置稍微麻烦一些外,对于多个客户端并行通讯业有局限性Ads 组件调用过程简介组件调用过程简介 13.NET调用流程新建工程新建工程添加引用TwinCAT.Ads.dll定义TcAdsClient对象 private TcAdsClient adsClient;初始化TcAdsClient对象adsClient = new TcAdsClient(); adsClient.Connect(801); 通过变量名取得变量的句柄注册DeviceNotification事件用于读写变量AddD
14、eviceNotification 读写变量接受处理返回结果释放资源ADS .NET组件通讯方式组件通讯方式 14直接封装TcAdsDll.Dll(ADS Client工作模式)按照AMS协议组件Socket数据包直接通过TCP系统通讯(ADS Server)Ads 组件调用过程简介组件调用过程简介 C+在 Visual C+ 中进行链接和程序开发时所需要的文件: TcAdsDll.dll 动态链接库 TcAdsDll.lib 使用 TcAdsDll.dll 的函数库 TcAdsApi.h 声明 ADS 功能的头文件 TcAdsDef.h 声明结构和常数的头文件主要接口:AdsPortOpen
15、:建立 TwinCAT 信息路由器连接 (通讯口)。AdsPortClose:关闭 TwinCAT 信息路由器的连接(通讯口)。AdsGetLocalAddress:返回本地 NetId 和端口号AdsSyncWriteReq:同步写数据到一个 ADS 设备AdsSyncReadReq:从 ADS 服务器中同步读数据。AdsSyncReadWriteReq:同步写入数据到 ADS 服务器中并从 ADS 设备接收返回的数据。AdsSyncReadStateReq:从 ADS 服务器中读 ADS 状态和设备状态。AdsSyncAddDeviceNotificationReq:通知在 ADS 服务器
16、中进行定义 (如 PLC)。当某个事件发生时,该功能 (回调功能) 在ADS 客户端进行调用 (C 程序)。AdsSyncDelDeviceNotificationReq:从 ADS 服务器中删除以前定义的通知。 15辅助工具辅助工具TwinCAT ADS Monitor TwinCAT ADS Monitor可以抓取ADS通讯数据包 16ADS数据结构帧数据通讯数据帧记录辅助工具辅助工具WiresharkPortable 17可以抓取网络适配器上的数据,包括ADS EtherCAT等,但不能抓取本地ADS数据包辅助工具仿真器辅助工具仿真器1.下载文件:以下路径为FTp路径(ftp:/)/So
17、ftware/embPC-Control/CE/Solutions/CX_Emulator/ emulator.zip (CE仿真器英文)/Software/embPC-Control/CE/Solutions/SDK/Beckhoff HMI 500 V1.3 SDK.msi/Software/embPC-Control/CE/Solutions/VS_NET2005/CE5_DbgHlp.zip 2.仿真器安装:a.安装Microsoft Windows CE 5.0 Emulator.msi需要连接互联网b.安装完仿真器,再安装虚拟网卡驱动netsvwrap.msi3.配置:a.安装后修
18、改StartEmulator_DE.bat 文件,将参数中的/Ethernet 的MAC改为本地网卡的实际MAC地址b.参数vmid 后的GUID值做为保存映像是的文件夹名称。4.设置仿真器和VS.net集成环境:Windows CE 5 的模拟器是基于x86的,VS 2005 的 Device Emulator 是基于ARM的,VS2005开发环境无法和Win CE模拟器进行集成进行远程调试。但是可以通过下面的方式实现集成:1).将CE5_DbgHlp.zip压缩包文件解压复制仿真器的 hard disksystem 路径下(实际的控制器新版本系统中这些文件已经存在)2).运行Conmanc
19、lient2.exe 18辅助工具仿真器辅助工具仿真器(续续)3).配置VS2005开发环境:a.转到“Tools-options-device tools-devices”b.选择Windows CE 5.0设备,点击“属性(properties)”按钮c.在Windows CE 5.0设备属性对话框点击“配置(configure)”按钮d.在TCP/IP配置对话框选定“使用特定的IP(use specific IP address)”,输入仿真器的IP地址。下面就可以Debug CE应用程序,选择部署到Windows CE5.0。如果部署仍然失败,运行仿真器hard disksystem
20、路径下的cMaccept.exe文件。测试正常后保存仿真器的设置,载关闭时选择Save Sate而不是True Off,这样下次启动仿真器就不需要重新设置仿真器。如果想删除保存的文件,转到“我的文档My Virtual Machines下,将上文提到的在 StartEmulator_DE.bat 设置的vmid 值为名称的文件夹删除即可。如果在具体操作用什么问题,您可以随时和我们联系。vs2008注意事项:用如下文件代替CE5_DbgHlp.zip 内的文件C:Program FilesCommon FilesMicrosoft SharedCoreCon1.0Targetwce400 x86
21、 19辅助工具仿真器辅助工具仿真器(续续)最近刚刚发布了基于Microsoft Virtual PC的WinCE6.0仿真器,能够更真实的模拟我们的硬件控制器。 20PLC运行状态检测运行状态检测1.HMI启动是需要检测PLC Server的启动状态2.在运行中检测控制器的状态举例:VS.NET:AmsRouterNotificationAdsStateChanged注:此两个事件只针对本地通讯有用(客户端和服务器端在同一个注:此两个事件只针对本地通讯有用(客户端和服务器端在同一个PC上)上) 21常用的常用的GroupIndex 22GroupIndex值描述0 x00004020M寄存器(
22、用M声明)0 x00004021MX寄存器(用MX声明)0 x0000F020I寄存器(用I声明)0 x0000F021 IX寄存器(用IX声明)0 x0000F030Q寄存器(用Q声明)0 x0000F031QX寄存器(用QX声明)0 x0000F003 取变量的句柄0 x0000F005 通过变量句柄访问变量值0 x0000F006 释放句柄1.对于MX,IX,QX寄存器的偏移地址的单位是“位”,而不是字节,计算地址需要注意2.M寄存器偏移地址最大值为0 x0000FFFF,而MX,I,IX,Q,QX偏移地址最大值为0 xFFFFFFFF。3.上表后三个主要用于C语言,其他高级语言已经封装
23、成专有方法,不需直接调用。TwinCAT System COM Object可以用来远程控制TwinCAT Service的停止,启动等操作 23TwinCAT System Manager Automation Interface可以实现System Manager的部分功能,如扫描IO,修改链接,激活配置等。实际应用举例:一键式系统更新:一键式系统更新:通过TwinCAT System Manager Automation Interface自动更新系统配置信息(tsm文件)通过PLC Control Command Line自动更新PLC程序(PRO) 24TwinCAT ADS Mod
24、ular Device Profile 基于ETG组织的Modular Device Profile 规范,可以对硬件等系统模块进行监控和设置,比如显示分辨率,网卡的IP地址等。具有和PLC和高级语言接口有效: Windows CE 6.0 (image version 3.08 or higher) Windows XPe (image version 2.2 or higher) 25WinCE下设置应用程序自启动的几种方法下设置应用程序自启动的几种方法一、利用一、利用WinCE的机制:的机制:1.修改系统Init入口:运行注册表编辑器,开始(Start)运行(Run)输入“REGEDIT
25、”然后确定,即打开注册表。定位到HKEY_LOCAL_MACHINEinit然后添加新项。比如:Launch99=app.exe Depend99=hex:14 00 1e 00 32 00 50 00 5a 00这个是设定启动顺序,launch后面的数字越大的越是后启动,Depend90后面的指定依赖项,为16进制,上面的语句表明依赖项为launch20,launch30,launch60,launch80,launch90定义的项目。device.exe和launch30中定义的gwes.exe, 注意Launch后面的数字范围为0到99 ,此范围之外的将不会有效果。2.放在Windows
26、启动中。默认windows的启动文件夹被指向到windows下的startup文件夹,这个文件夹不是CF上的物理文件夹,所以不能保存用户改动的东西,如果需要用到这个文件夹,需要修改注册表将这个系统文件夹位置修改到指向CF卡(也就是Hard Disk)上的一个文件夹。定位到HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders修改Startup的值为Hard Disk上的一个文件夹,然后将应用程序的快捷方式放到这个文件夹,系统启动时即会自动运行。相当于向开始菜单的启动中添加项目。 26WinCE下设置应用程序自启动的几种方法
27、下设置应用程序自启动的几种方法3.修改Autoexec.cmd文件这个文件位于Hard DiskSystem下,这个文件就是一个DOS下的批处理文件,Beckhoff CE启动时会自动运行Hard DiskSystemstartup.exe程序,这个程序会查找Hard DiskSystem下的Autoexec.cmd文件,如果有则运行它,因此将要自定运行的命令写入这个文件,也会达到自动运行的效果,在命令前加上start关键字,则批处理程序运行完dos窗口会自动关闭。如果要关闭这个只需要将autoexec.cmd改名。以上三种方法都是利用Win CE系统机制实现自动运行应用程序的目的,用这种方法
28、可能会产生应用程序比PLC Server先运行起来,如果应用程序中存在和PLC Server通过的过程,如果HMI先运行起来可能会造成初始化失败,因此用这种方法启动应用程序,需要在应用程序入口加上检测PLC运行状态的过程。二、利用二、利用PLC语言来运行用户定制的语言来运行用户定制的HMI程序程序这种是利用PLC库中的NT_StartProcess功能块,在PLC加载完,执行HMI应用程序,这样可以保证启动的先后顺序。三,使用使用WinCE6 Image内部集成的内部集成的Start Manager工具工具 27OPC Client-和和Beckhoff OPC Server通讯通讯大体步骤:
29、1.PLC程序添加OPC相关属性,详细参考Information System2.配置OPC Server:设置AutoCfg为83.下载:OPC Foundation website下载 OpcNetApi.dll ,OpcNetApi.Com.dll(具有成员资格的组织才可以下载)4.在.net中编程实现OPC Client的功能枚举OPC服务器: private Opc.Server servers; servers = m_discovery.GetAvailableServers(Specification.COM_DA_20, , null);枚举变量:通过递归调用m_server.Browse来枚举OPC中的变量 28