WinAC ODK V4.2 快速入门
1. WinAC ODK 概述? WinAC ODK 是WinLC RTX的开放接口, 它提供了一套工具(函数),利用这些函数和高级语言(C/C++、VB、C#)可编写与WinLC RTX交互的用户应用程序。WinAC ODK提供了以下三种编程接口: •® CCX – Custom Code Extension(自定义代码扩展)
•® SMX – Shared Memory Extension (共享内存扩展)
•® CMI – Controller Management Interface(控制器管理接口)
CCX
使用高级语言开发环境MS Visual Studio并结合CCX接口可开发出在Windows环境下运行的DLL文件及在RTSS实时子系统下运行的RTDLL文件。可通过在Step 7用户程序中使用SFB来调用这些DLL或RTDLL扩展对象来扩展WinLC RTX 的功能。 SMX
使用高级语言开发环境MS Visual Studio并结合SMX接口可开发出在Windows环境下运行的.EXE可执行文件及在RTSS实时子系统下运行的.RTSS文件。这些可执行文件与WinLC RTX中的Step 7用户程序相互独立运行,但它们之间可通过访问一片共享存储区来快速交换数据。 CMI
使用高级语言开发环境MS Visual Studio并结合CMI接口可开发出在Windows环境下运行的具有WinLC RTX操作面板全部或部分功能的用户界面,如: •® 显示WinLC RTX控制器的运行状态,切换其运行模式
•® 读取WinLC RTX的状态和故障信息
•® 备份和恢复WinLC RTX的程序
•® 设置WinLC RTX的运行参数
本文档重点讲解最常用的CCX和SMX接口的使用,CMI接口的具体使用请参考WinAC ODK用户手册和ODK 安装目录下的Examples\CMI\子目录下的多个例子。 注意:开发在RTSS实时子系统下运行的RTDLL实时动态链接库文件或RTSS可执行程序需要IntervalZero RTX SDK的支持,此SDK非SIEMENS产品,需要从IntervalZero公司购买。 2. WinAC ODK 的应用 可使用WinAC ODK 和Microsoft Visual Studio开发适合用高级语言编写的复杂算法程序,并在WinLC RTX中调用此程序;可使用WinAC ODK 和Microsoft Visual Studio开发用户程序使得WinLC RTX与在Windows系统或RTSS实时子系统中的第三方设备进行通信;可使用WinAC ODK 和Microsoft Visual Studio开发用户操作界面并在界面中操作WinLC RTX、集成显示WinLC RTX的各种状态信息、设置WinLC RTX的各种参数。 3. WinAC ODK V4.2 的安装 3.1 WinAC ODK V4.2 软件包 WinAC ODK V4.2 软件包 (订货号为:6ES7806-1CC03-0BA0) 包含如下组件:
WinAC ODK V4.2 DVD:
•® WinAC ODK V4.2 安装软件
•® WinAC ODK V4.2 用户手册
•® WinAC ODK V4.2 帮助文件
其它:
•® Certificate of License (COL) --许可证书
提示:
使用WinAC ODK开发的程序不需要运行时授权。 3.2 WinAC ODK V4.2 安装的硬件需求 •® 512MB 内存
•® 完全安装需要至少 30MB 硬盘空间
3.3 WinAC ODK V4.2 安装的软件需求 •® Microsoft Windows XP Professional, Service Pack 2 或Service Pack 3
•® 对于WinAC ODK CCX 和 SMX,需要 WinLC RTX V4.4(WinAC RTX 2008) 或WinLC RTX V4.5(WinAC RTX 2009)
•® 对于WinAC ODK CMI,需要 WinLC RTX V4.2 (WinAC RTX 2009)或更高版本
•® 需要如下集成开发环境中的一种:
>® Microsoft Visual C++ 6.0 SP 5 或更高版本
>® Microsoft Visual C++ .NET 2003
>® Microsoft Visual C++ .NET 2005 或 2008
>® Microsoft Visual Basic 2005 或 2008
>® Microsoft Visual C# 2005 或 2008 提示:
®在使用WinAC ODK V4.2开发CCX或SMX实时应用时,另外需要来自IntervalZero公司的RTX SDK V8.1的支持。开发Windows下的非实时应用时则不需要。
®运行使用.NET Framework开发的应用的计算机需要安装Visual Studio 2005 或 2008或.NET 2.0 Framework,以提供.NET运行环境支持。 3.4 WinAC ODK V4.2 安装前的检查
®请确保在安装WinAC ODK V4.2时,没有任何WinAC RTX组件在运行。因为SIMATIC Computing、WinAC 控制器和其它 WinAC 组件使用共同的文件,如果在以上任何组件正在运行时安装WinAC ODK V4.2,则会产生文件冲突。
®如果要安装WinAC ODK V4.2的计算机上安装有更早版本的WinAC ODK,请先卸载,再安装WinAC ODK V4.2。 3.5 WinAC ODK V4.2 的安装过程
® 1.插入WinAC ODK V4.2安装光盘。
® 2.按安装提示一步步完成安装。
WinAC ODK V4.2 快速入门
图1 WinAC ODK V4.2安装界面 3.6 WinAC ODK V4.2 安装后系统的变化 - ® Windows 程序组中增加了Simatic ® PC based control ® WinAC ODK Application Wizard, 用来启动WinAC ODK V4.2 应用开发向导,可根据应用类型、编程语言及开发环境来生成开发项目框架。
- ® 在安装目录C:\Program Files\Siemens\WinAC(此为默认安装目录)下新增一个名为“ODK”的文件夹,此文件夹下有例子程序、帮助文件、头文件、库文件等资料。
4. CCX功能及实现
CCX功能由如下四个步骤实现:
1.® 使用WinAC ODK 应用程序向导生成开发项目的框架。
2.® CCX编程 (在向导生成的项目中添加用户逻辑程序) 。
3.® 在STEP7 中调用CCX对象。
4.® 调试。
4.1 使用向导生成CCX功能开发框架
® 通过路径“开始所有程序Simatic  PC based control  WinAC ODK Application Wizard”打开WinAC ODK 应用向导,如图2所示。
WinAC ODK V4.2 快速入门
图2 ® 点击“Next”按钮出现图3所示的项目信息窗口(Project Information),在此填入项目名称、存放目录,选择应用程序类型为CCX、编程语言为C/C++及编译器为Microsoft Visual Studio 2005。
WinAC ODK V4.2 快速入门
图3 ® 点击“Next”按钮出现图4所示的CCX命令(CCX Subcommands)设置窗口。
WinAC ODK V4.2 快速入门
图4 ® 在图4界面中设置CCX对象中所包含的命令的个数和名称,在此可添加多个命令并命名。在Step 7程序中调用CCX对象时使用命令索引来指定所调用的命令函数,命令函数即为自定义程序的存放位置。默认为一个命令,名称为Subcommand_0。如要改名,先删除,再添加,在添加时命名。
® 点击“Next”按钮出现图5所示的异步处理(Asynchronous Processing)窗口。如果在Step 7程序中采用异步方式(SFB65003)调用CCX对象,则不勾选“Include asynchronous processing”,点击“Next”跳过此界面。如果在Step 7程序中采用同步方式(SFB65002)调用CCX对象,而且希望用户程序与调用CCX对象的Step 7程序的扫描循环异步执行,则需要勾选“Include asynchronous processing”,再点击“Add”按钮出现图6所示异步事件(Asynchronous Event)窗口。
WinAC ODK V4.2 快速入门
图5
WinAC ODK V4.2 快速入门
图6 ® 在图6所示异步事件(Asynchronous Event)窗口填写增加的事件信息,包括类名称、头文件及源文件名称,选择事件删除的方式。点击OK。如要改名,先删除,再添加,在添加时命名。本文档中的例子不勾选此项。
点击“Next”按钮出现图7所示的异步监视(Asynchronous Monitoring)窗口。如果不需要异步监视功能,则不勾选“Include asynchronous monitoring ”,点击“Next”跳过此界面。如果需要在后台实现监视数据或等待异步于循环扫描周期的事件发生的功能,则需要勾选“Include asynchronous monitoring”,再点击“Add”按钮出现图8所示监视线程(Monitor Thread)窗口。在所示监视线程窗口中输入类名称、头文件名和源文件名,并选择线程的优先级。本文档中的例子不勾选此项。
WinAC ODK V4.2 快速入门
图7
WinAC ODK V4.2 快速入门
图8 ® 完成异步监视设置后点击“Next”按钮出现图9所示的厂商信息(Vendor Information)窗口。在此输入软件生产商名称、软件名称、软件版本、订货号及描述。输入完成后点击“Next”按钮出现图10所示的项目信息列表,核对后如有问题点击“Back”按钮返回修改,核对无误则点击“Finish”按钮由向导生成项目框架并出现图11所示项目创建完成(Project Created)窗口。
WinAC ODK V4.2 快速入门
图9
WinAC ODK V4.2 快速入门
图10 ® 图11所示项目创建完成(Project Created)窗口指出生成项目的路径,并提示可在以注释“// TODO:”标明的位置添加用户代码。点击“Close”按钮完成向导所有步骤。
WinAC ODK V4.2 快速入门
图11 4.2 CCX编程
WinAC ODK V4.2 快速入门
| 使用Visual Studio 2005打开ODK应用程序向导生成的项目“ccx_prj”,其项目文件列表如图12所示。“ccx_prj.cpp”文件包含CCX扩展对象DLL的入口点和主函数的实现,程序由向导自动生成,无需在此文件中添加用户程序。“ccx_prjfunc.cpp”文件包含WinAC RTX程序调用CCX扩展对象时所要实现功能的“Excute”函数, 如图13所示。“Excute”函数根据从WinAC RTX程序中传递过来的输入变量“command”来判断执行哪个子命令。本文档的例子只设置了一个命令“Subcommand_0”,所以向导生成的程序为变量“command”值为0时执行Subcommand_0函数,为其它值时则只返回一个特定值而不执行任何函数。在Subcommand_0函数中标有“TODO”字样注释的位置可添加用户定义的代码。“ODKCallback.cpp”、“WinLCReadData.cpp”和“ WinLCReadWriteData.cpp”文件的内容则为WinAC ODK所提供函数的功能的实现代码,为向导自动生成,用户不要更改。 |
WinAC ODK V4.2 快速入门
图13 如图14所示,添加用户代码完成一个简单功能,即读取两个输入变量“add1”和“add2”的值,将两个输入变量的和赋值给输出变量“sum1_2”。先定义输入变量“add1”和“add2”及输出变量“sum1_2”的类型(Visual Studio C++ 中的变量类型要与对应的STEP 7中的变量类型一致,对应关系见表1),再使用定义为CWinLCReadData类的rInput的函数rInput.ODK_ReadS7INT()分别读取由STEP 7程序传递过来的输入参数的值并赋值给变量“add1”和“add2”,函数rInput.ODK_ReadS7INT()的第一个参数为输入变量在输入变量缓冲区的偏移地址,第二个参数为将读取的值赋值的变量。接下来将两个输入变量的和赋值给输出变量“sum1_2”,最后使用定义为CWinLCReadWriteData类的rOutput的函数rOutput.ODK_WriteS7DINT()将输出变量“sum1_2”的值写到输出变量缓冲区,函数rOutput.ODK_WriteS7DINT()的第一个参数为输出变量在输出变量缓冲区的偏移地址,第二个参数为要写入的变量。
WinAC ODK V4.2 快速入门
图 14 程序编写完毕后将Visual Studio配置管理器配置成“Win32 Release”,如图15所示。然后选择Visual Studio C++ 2005菜单“生成—>生成解决方案”,这样会在项目文件夹下的“Release”子文件夹下生成DLL文件“ccx_prj.dll”。将生成的DLL文件“ccx_prj.dll”复制到“C:\WINDOWS\system32\”目录下。
WinAC ODK V4.2 快速入门
图15
表1 C++ 与 STEP 7 变量类型对照表
Visual Studio C++ 中的变量类型 | STEP 7中的变量类型 | Bool | BOOL | Unsigned char | BYTE | Unsigned short | WORD | Unsigned int | DWORD | Unsigned short | S5 TIME | Unsigned short | S7 DATE | Unsigned int | S7 TIME OF DAY | Short | INT | Long | DINT | Float | REAL | Long | S7 TIME | Char | S7 CHAR |
4.3 在STEP7 中调用CCX对象 生成CCX对象DLL文件后,可在STEP 7程序中用SFB功能块来调用DLL文件以扩展WinLC RTX的功能。具体步骤如下: 1. 加载WinAC ODK 库文件到STEP 7项目中。打开SIMATIC Manager, 在SIMATIC Manager中选择菜单“FileRetrieve…”,在弹出对话框中选择路径C:\Program Files\Siemens\WINAC\ODK\Step7\S7libs\,双击Odklib.zip文件将其释放到Step7\S7LIBS\目录下。WinAC ODK 库包含SFB65001、SFB65002和SFB65003三个系统功能块,可用于创建CCX对象实例和调用CCX对象。SFB65001用于创建一个CCX对象的实例,SFB65002用于同步调用CCX对象,SFB65003用于异步调用CCX对象。
2.编制STEP 7程序,调用CCX对象。新建一个STEP 7项目,如“ccx_prj”。打开WinAC ODK 库,将SFB65001、SFB65002、SFB65003复制到“ccx_prj”项目中。在OB100中创建如图16所示程序来创建CCX对象实例,其输入管脚PROGID的值保存在如图17所示的SFB65001背景数据块DB65001中,为“*dll:ccx_prj.dll”,如果创建成功则输出管脚STATUS返回值为介于0x0001和0x7FFF之间的对象句柄值,将其传递给图18所示SFB65003异步调用CCX对象的输入管脚“OBJHANDLE”。如创建不成功则输出管脚STATUS返回值为错误代码。在OB1中创建如图18所示程序来异步调用CCX对象实例。CCX对象的函数输入输出数据结构如图19所示,SFB65003异步调用会将输入输出参数的值传递到CCX对象实例中。
WinAC ODK V4.2 快速入门
图16 使用SFB65001创建CCX对象实例
WinAC ODK V4.2 快速入门
图17 SFB65001背景数据块DB65001
WinAC ODK V4.2 快速入门
图18 使用SFB65003异步调用CCX对象
WinAC ODK V4.2 快速入门
图19 CCX对象输入输出参数结构 在完成STEP 7程序代码编写后,将代码下载到WinLC RTX控制器中并运行。在如图20所示变量监控表中将输入参数“add1”和“add2”的值分别设置为“3”和“-20”,将“COMMAND”管脚的值设置为0,将“REQ”管脚的值置1,可看到CCX对象中命令0对应的Subcommand_0函数成功执行,即“sum1_2”的值为“-17”,是“add1”和“add2”的和。
WinAC ODK V4.2 快速入门
图20 异步调用CCX对象的变量监控表 使用SFB65002同步调用的方法与SFB65003类似,细节可参考手册。当STEP 7 程序执行SFB65002同步调用时,主程序循环(如OB1)会一直等待CCX对象执行完毕才接着执行循环中其它程序,在此期间更高优先级的OB也无法正常中断。因此要慎重选择同步调用方式。当STEP 7 程序执行SFB65003异步调用时,主程序循环(如OB1)立即返回,接着执行循环中的其它程序,CCX对象则在与主循环独立的另一线程中执行,在CCX对象的执行状态可通过将SFB65003 的“REQ”输入管脚的值设置为0来查询。如果CCX对象正在执行,则返回的SFB65003 的“BUSY”输出管脚的值为1,如果则返回的SFB65003 的“BUSY”输出管脚的值为0,则表明CCX对象已执行完毕,此时可将CCX对象返回的输出变量的值用于STEP 7程序。 4.4 CCX对象的调试 调试CCX对象由如下几步实现: 1.生成一个调试版本的DLL文件。将Visual Studio配置管理器配置成“Win32 Debug”,如图21所示。重新编译生成一个新的DLL文件。将项目文件夹下的“Debug”子文件夹下新的DLL文件复制到“C:\WINDOWS\system32\”目录下。
WinAC ODK V4.2 快速入门
图21 2.打开DLL项目“ccx_prj”,通过菜单“项目属性”打开“ccx_prj属性页”,选择“配置属性调试”,如图22所示,在“命令”设置的下拉列表框中选择“浏览”,在弹出的对话框中双击选择WinLC RTX的安装目录(默认为C:\Program Files\Siemens\WINAC\WinLCRTX\)下的s7wlcrtx.exe文件,如图23所示。点击“OK”完成设置。在DLL程序代码中设置断点,启动调试器。调试器会启动WinLC RTX。双击系统托盘打开WinLC RTX控制面板,将WinLC RTX切换到运行模式。然后便可以开始调试DLL程序逻辑。程序逻辑调试完毕后通过WinLC RTX控制面板菜单“CPUShut Down Controller”关闭WinLC RTX来结束调试会话。调试完成后,需要将Visual Studio配置管理器配置成“Win32 Release”,编译生成新的DLL文件。STEP 7程序使用SFB调用此DLL文件。
WinAC ODK V4.2 快速入门
图22
WinAC ODK V4.2 快速入门
图23 本文档通过一个简单的例子来说明开发CCX对象的整个过程,用户可参考WinAC ODK用户手册来充分利用WinAC ODK提供的类和辅助函数来实现复杂的功能。还可以参考WinAC ODK安装目录下的Examples\CCX\子目录下的例子程序。 5. SMX功能及实现 SMX的实现如图24所示,WinLC RTX中的STEP 7程序与使用SMX接口开发的应用程序共同访问一个4KB的输入内存区和一个4KB的输出内存区。两者独立执行,通过读写共享内存区来实现数据的交换。STEP 7 程序通过L/T指令来访问共享内存区,即读写I/O映像区的方式,I/O映像区的地址范围为PIW/PQW 16384-20478。SMX接口提供多种函数来访问共享内存区。如S7SMX_ReadS7Word (共享内存区的偏移地址,返回值) 和 S7SMX_ReadS7Word (共享内存区的偏移地址,写入值) 等,共享内存区的偏移地址范围为0-4096。
WinAC ODK V4.2 快速入门
图24 SMX功能由如下四个步骤实现: 1. 使用WinAC ODK 应用程序向导生成SMX开发项目的框架。
2. SMX编程 (在向导生成的项目中添加用户逻辑程序) 。
3. 编制与SMX应用程序交换数据的STEP7 程序。
5.1 使用WinAC ODK 应用程序向导生成SMX开发项目的框架 通过路径“开始所有程序Simatic  PC based control  WinAC ODK Application Wizard”打开WinAC ODK 应用向导,如图2所示。
点击“Next”按钮出现图25所示的项目信息窗口(Project Information),在此填入项目名称、存放目录,选择应用程序类型为SMX、编程语言为C/C++、C/C++程序类型为Win32及编译器为Microsoft Visual Studio 2005。
WinAC ODK V4.2 快速入门
图25 点击“Next”按钮出现出现图26所示的厂商信息(Vendor Information)窗口。在此输入软件生产商名称、软件名称、软件版本、订货号及描述。输入完成后点击“Next”按钮出现图27所示的项目信息列表,核对后如有问题点击“Back”按钮返回修改,核对无误则点击“Finish”按钮由向导生成项目框架并出现图28所示项目创建完成(Project Created)窗口。点击“Close”按钮完成项目创建。
WinAC ODK V4.2 快速入门
图26
WinAC ODK V4.2 快速入门
图27
WinAC ODK V4.2 快速入门
图28 5.2 编制SMX开发项目的自定义代码
使用Visual Studio 2005打开ODK应用程序向导生成的项目“smx_prj”,其项目文件列表如图29所示。
WinAC ODK V4.2 快速入门
图29 打开图29所示项目列表中的“smx_prj.cpp”文件,可在如图30所示标有“//TODO”注释的位置添加用户自定义代码。
WinAC ODK V4.2 快速入门
图30 ® 编程时先要使用S7SMX_Open()函数创建一个SMX实例,在程序退出时使用S7SMX_Close()函数关闭所创建的实例。S7SMX_Open(DWORD dwFlags, const char* pDeviceName, S7SMX_HANDLE* pHandle)中第一个参数为输入参数,用来指示其模式是读或写,可选值为S7SMX_OPEN_MODE_READ 和 S7SMX_OPEN_MODE_WRITE。第二个参数为输入参数,用来指名所要连接的控制器的名称,即在站配置管理器中显示的控制器的名称“WinLC RTX”。第三个参数为输出参数,是所创建的SMX实例的句柄值,可用于读写共享内存区的函数。
® 在创建SMX实例成功后,可使用SMX接口提供的一系列全局函数( S7SMX_ReadS7<S7数据类型>和S7SMX_ WriteS7<S7数据类型> )用来读写共享内存区的数据,如S7SMX_ReadS7BOOL, S7SMX_WriteS7BOOL,S7SMX_ReadS7BYTE, S7SMX_WriteS7BYTE等,支持的具体数据类型及函数用法请参考WinAC ODK 安装目录下的Help\SMX\SMX_ObjectWeb.chm帮助文件。SMX接口同时提供一组共4个函数来成块读写共享内存区的数据,S7SMX_AllocExtMemBuffer()函数用来开辟一片扩展内存缓冲区来用于成块读写操作,S7SMX_FreeExtMemBuffer()函数用来释放开辟的缓冲区资源,S7SMX_ReadBlock()函数读取共享内存区一块数据存放到S7SMX_AllocExtMemBuffer()函数开辟的扩展内存缓冲区中,S7SMX_WriteBlock()函数则将S7SMX_AllocExtMemBuffer()函数开辟的扩展内存缓冲区中的一块数据写入到共享内存区中。成块读写函数没有在S7数据类型和PC数据类型之间进行转换,所以在使用S7SMX_ReadBlock()函数之后要使用S7SMX_ReadS7<S7数据类型>以及使用S7SMX_WriteBlock()函数则之前要使用S7SMX_ WriteS7<S7数据类型>来进行数据高低字节的转换,此时使用的句柄为S7SMX_AllocExtMemBuffer()函数返回的句柄而不是S7SMX_Open()函数返回的句柄。关于此组函数的具体使用请参考WinAC ODK 安装目录下的Help\SMX\SMX_ObjectWeb.chm帮助文件。
® 用户程序编写完毕后即可编译项目生成.EXE可执行程序。此可执行程序即可与WinLC RTX运行的STEP 7程序通过共享内存区进行数据交换。
® STEP 7程序及SMX程序可同时访问共享内存区,SMX接口没有提供任何工具来确保数据的一致性或同步数据的读写操作,这些功能需要用户通过编程来实现。可参考WinAC ODK 安装目录下的Examples\SMX\Cpp\子目录下的例子“SMX_ConsData”。 5.3 编制与SMX应用程序交换数据的STEP7 程序 ® 编制与SMX应用程序交换数据的STEP7 程序相当简单,只需使用Load和Transfer指令来读写共享内存区的数据,如图24所示。
|