0

购物车

客服

收藏

公众号

公众号

反馈

︿

顶部

首页 > 工控资讯 > 品牌新闻 >西门子>资讯详情

西门子WinAC ODK

2018-11-22 浏览量:225

点击分享到微信

WinAC ODK 4.1是一个专用于WinAC的开发工具,使用这个工具可以将C/C++程序经编译连接后嵌入到WinAC Basis/WinAC RTXPLC程序中,还可以编写应用程序与WinAC进行快速的数据交换、监控WinAC状态以及控制WinAC操作面板。WinAC ODK 4.1包括三个组件:

• 定制代码扩展(CCX)

• 共享内存交换(SMX)

• 控制器管理接口(CMI)

5.1 定制代码扩展(CCX: Custom Code Extension)

WinAC ODK提供了一个向导,使用该向导可生成Visual C++ 6.0Visual .NET的工程,在Visual Stdio集成开发环境下编译连接后,生成动态链接库。在WinACStep7程序中利用2个系统功能块SFB65001SFB65002便可调用动态链接库中的函数。该功能可用于软件型WinACWinAC BasisWinAC RTX),但不能用于插槽型WinAC。下面将以例子来说明如何生成和调用。

Step7中的数据mw20mw22作为被加数和加数传给动态连接库,由动态连接库中的函数将这两个数相加后送回Step7mw24中。

5.1 应用程序类型和开发工具类型

1. 运行“PC Based Control”程序组下的“WinAC ODK Appwizard”,打开ODK动态链接库生成向导,单击 “Next”,出现如图5.1所示的项目信息窗口,在“Name”编辑框中输入项目的工程名称,“Directory”框中选择工程存放目录,应用程序类型选择“CCX”,编译器类型选择“Visual C++ 6.0,如图5.1所作的选择,单击“Next”进入一步。

2. 在“CCX Subcommands”窗口中,可创建函数给Step7调用,默认时只有一个函数,根据实际需求可创建多个,创建时可以给函数名称取一个有意义的名字。每一个函数都有函数索引号,Step7调用这些函数时必须输入函数的索引号。在图5.2上,我们建立名为“AddInt”的函数,它的函数索引号为0

5.2 添加函数

3. 单击“Next”进入“Asynchronous Processing”窗口,在此窗口中指明动态链接库

是否包含异步处理器,异步处理器是指在后台运行的一个Windows线程,这个线程可以处理多个事件,多个事件在队列中等待异步处理器的处理。当有一个事件产生时,如果异步处理器正在处理其它的事件,则当前产生的事件进入到事件队列等待处理。某一个事件处理完,异步处理器就将该事件从队列中删除,并从队列中取出下一个事件继续处理。如果程序中有包含异步处理器,可指定异步处理器线程的优先级,以及创建多少个异步事件。比较耗时的非经常性操作,如磁盘操作、数据库查询等放在异步处理器中执行。本例不使用异步处理器。直接单击“Next”进入下一步。

4. 在“Asynchronous Monitoring”窗口中,可指明动态链接库程序中是否要包含异步监控,可以同时生成多个异步监控,每个异步监控都是在后台运行的一个Windows线程,这些线程都是在后台循环运行,它不影响OB1块(或其它组织块)的执行时间。比较耗时的且要求循环执行的操作放在异步监控中执行,如串口通讯、Socket通讯等。本例不使用异步处理器。直接单击“Next”进入下一个窗口。

5.Vendor Information”窗口中,我们不输入任何内容单击“Next”后,在下一窗口中单击“Finish”完成向导的各个步骤。

6. Visual C++ 6.0中打开刚才创建的工程,找到在第二步中添加的“AddInt”函数,如果工程名为demo1,“AddInt”在demo1func.cpp文件中。在此函数体中输入如图5.3所示的代码。

5.3 Visual C++中编写的相加函数

AddInt函数中的参数InputOutput是与PLC程序进行数据交换时的对象变量,Input参数数据只能从Step7传给C++,而Output参数数据既可以从Step7传给C++,也可以从C++传给Step7。图中代码的含义是:先定义三个短整数的变量,被加数从输出缓冲区偏移地址为0处读取,加数从输出缓冲区偏移地址为2处读取,输入输出缓冲区的偏移地址以字节为单位。将两数相加后的结果写入到输出缓冲区偏移地址为4处。

单击Visual C++开发运行环境菜单“Build->Set Active Configuration”,打开“Set Active Project Configuration”对话框,如果是WinAC RTX且装有RTX SDK,则可选择“Win32 RTSS”的调试版或发布版,否则为“Win32”的调试版或发布版。这里我们选择“Win32 Release”。

点击菜单上的Build->Build demo11.dll,编译并连接生成demo1.dll动态库。

7. Step7打开一个已组态好的WinAC工程。添加组织块OB100,在OB100中调用SFB65001SFB65001SFB65002WinAC ODK 提供的系统功能块,功能相当于WinAC调用动态链接库的接口块。SFB65001为打开动态库函数,SFB65002为调用动态库中的函数。只有调用这两个系统功能块,Step7语句才能调用动态库中的函数。

如果在梯形图编辑器的库中没有出现WinAC ODK library(即这两个系统功能块),可单击“SIMATIC Manager”的菜单项“File->Retrieve”,打开“Retrieving Select an Archive”对话框,在对话框中打开目标文件“ODKlib.zip”,此文件位于WinAC ODK的安装目录下。按照提示完成操作后,梯形图编辑器中的库下便增加了WinAC ODK库。ODK库下包含SFB65001SFB65002

OB100编写程序如图5.4所示:

5.4 打开动态链接库

  1. 编辑SFB65001的背景数据块DB1001,内容如图5.5所示

5.5 SFB65001的调用参数

数据块起始地址0的数值为一字符串,此字符串指明动态链接库的路径和文件名。如果动态链接库的扩展名为dll,则路径名前加“*DLL:,如果动态链接库的扩展名为RTDLL,则路径名前加“*RTSS:”。第二个参数是调用动态库是否成功的返回标志。

9. 编辑组织块OB1,增加如图5.6所示的一条语句,调用SFB65002

Command参数为在第3步建立函数时的函数索引号,在本例中为0

InputOutput为与C代码进行数据交换的输入/输出缓冲区,这里的Input即对应图5.3中的InputOutput对应图5.3中的OutputInputOutputStep7的“ANY”数据类型,指明数据区的起始地址和长度。在图5.6Ouput指明为从m20.0开始,占用十个字节长度,即输出缓冲区为mw20-mw28,输入缓冲区没有指定。

10.将程序编译存盘并下载到WinAC控制器。新建一个变量表进行测试,可以看到mw24mw20mw22之和。

除了在Step7中调用C编译后的代码外,WinAC ODK中还提供了其它的功能和函数,如在C++中也可以设置条件使PLC程序中的组织块被调用,以及当WinAC停机或启动时应调用的C代码、异步处理器和异步监控等。可参考WinAC ODK安装目录下的例子程序。

5.6 调用动态库中的函数

5.2 共享内存交换(SMX:Shared Memory Exchange)

SMX可用于软件型WinAC和插槽式WinACSMX其实是一组动态链接库,Win32应用程序可调用库中的函数来与WinAC中的PIPQ区进行数据通讯。软件型的WinAC使用共享内存的方式,插槽式的WinAC采用双端口存储器(dual-port RAM)的方式来交换数据,即通讯要么直接在内存中完成,要么通过PC的系统总线来完成,因此数据交换速度极快。但无论使用两种方式中的哪一种,在软件实现上都没有区别。

输入输出区各占用4K字节。WinAC BasisWinAC RTXWinAC Slot 416的输入区为PIW16384-PIW20478,输出区为PQW16384-PQW20478WinAC Slot 412的输入区为PIW4096-

PIW8190,输出区为PQW4096-PQW8190

可以使用向导来生成SMX程序,在如图5.1中选择应用程序类型为“MFC SMXWin32 SMX”,则生成的程序是SMX程序。用向导生成的MFC程序不一定能满足实际要求,如果这种情况发生,将不能使用SMX向导。下面以例子来说明不采用向导,如何使用SMX

1. 使用Visual C++向导(ODK向导)生成一个对话框程序。

2. 打开Visual C++菜单下的Project->Settings。在打开的项目设置对话框中,选择C/C++选项卡,在Category列表框中选择“Preprocessor”,在Addition Include directories编辑框中输入“c:\program files\siemens\winac\odk\include(根据本机WinAC ODK实际安装目录来设置,下同)

3. 将“c:\program files\siemens\winac\odk\lib目录下的库文件s7smxx.lib拷贝到

当前项目目录下。

4.在对话框头文件中加上“include <s7smxx.h>”语句。

5. 在对话框资源中添加两个按钮:一个读数据按钮,一个写数据按钮。两个编辑框:一

个接收读取的数,一个设置要写的数据,用Visual C++的类向导创建这两个编辑框关联的无

符号整型变量,m_readvaluem_writevalue

6.在对话框类中增加两个私有变量

long *hSmx;

S7SMX_ERROR smxError;

7. 在对话框窗口创建后的初始化对话框内的控件函数(OnInitDialog)的最后加上如下语句:

smxError=S7SMX_Open(S7SMX_OPEN_MODE_WRITE,"WinLC",(void **)&hSmx);

这条语句的含义为打开SMX连接,其中的第二个参数为WinAC控制器类型。

8. 编写读数据和写数据的按钮数据如下

void CDemo2Dlg::OnRead()

{

ReadS7WORD(hSmx,0,(unsigned short *)&m_readvalue);

UpdateData(false);

}

//第二个参数为偏移地址,相对于PQB 16384时的偏移地址,为0即指PQW16384

//即读取WinAC PQW 16384的值,并存放在m_readvalue中。

void CDemo2Dlg::OnWrite()

{

UpdateData();

WriteS7WORD(hSmx,6,(unsigned short)m_writevalue);

}

//m_writevalue值写入到WinAC PIW 16390(16384 + 偏移量6)中。

9. 编译连接生成可执行程序

10. Step7OB1增加如下语句并将程序下载。

L MW 30

T PQW16384

L PIW16390

T MW 32

11. 打开变量表,监控mw30mw32。运行第9步生成的程序,点击按钮测试结果。

上面简要介绍了如何使用SMXWinAC ODK提供了详细的文档和例子程序来说明如何使用SMX

5.3 控制器管理接口(CMI Controller Management Interface)

控制器管理接口可使用户程序集成WinAC 操作面板的全部功能,比如在客户程序上可以完成如下功能:

• 显示WinAC控制器运行状态

• 归档和恢复PLC程序

• 本地或远程启停WinAC

• 更改WinAC操作面板的运行参数

如何使用CMI可阅读参考手册和例子程序

文章图片来源于网络
免责声明: 凡注明来源“易卖工控网”的所有作品,均为本站合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本站作品均来自互联网,转载目的仅作为互联网信息传播之用,并不代表本网赞同其观点和对其真实性、完整性、及时性不作任何保证或负责。

热门品牌新闻
最新品牌新闻
相关资讯
产品推广
为您推荐“西门子”相关产品