WINCC C脚本是大家在组态项目时经常用到的功能,但在使用过程中有这样那样的疑惑或问题,此文总结一些内容,以供学习交流。
1脚本全局C变量
WINCC C脚本的全局变量,在自定义的任意项目、标准函数外定义。如下图,在add项目函数前定义的int a变量为全局变量,此变量在WINCC运行后由系统创建,即使函数本身未被调用,且为运行系统中的每一个函数和动作所知。且通常可被画面中的脚本访问。
注意:WINCC处于运行状态时,如果重新编译函数并保存,定义在该函数前的全局变量将被初始化。但其不受重新生成头文件的影响。
通过在函数或动作内使用说明符extern将变量声明为外部变量,即可将全局 C 变量用在函数或动作中。
而对于sub函数内定义的int b变量,为局部变量,只能在sub函数内部使用。 WINCC C中每个项目、标准函数和定义的全局 C 变量的最大可用空间是64KB,如果超出此范围,编译时会报错。C语言中获得变量空间大小的函数为sizeof()。
2脚本中调用外部DLL
WinCC 允许用户在项目、标准函数、全局动作及画面脚本中使用自己的 DLL(动态链接库)。
WINCC使用预处理指令#pragma code,实现DLL的动态链接。在项目、标准函数、全局动作及画面脚本中添加下列格式代码: #pragma code("<Name>.dll") <Type of returned value> <Function_name 1>(...); <Type of returned value> <Function_name2>(...); <Type of returned value> <Function_name n>(...); <Type of returned value> <Function_name 1>(...)对要调用的DLL中函数进行声明。此DLL 要放在WINCC的“\bin”目录中,或保存在“PATH”系统环境变量中所定义的路径中。
#pragma code的预处理命令和定义全局变量不同,如下图在add函数前预定义的动态链接kernel32.dll,只对add函数有用。
对于全局动作和画面脚本,无法在函数外部输入代码,所以预处理命令都在内部
对于全局动作和画面脚本,默认包含#include "apdefap.h"头文件,所以也可以把预处理命令写在apdefap.h头文件里(apdefap.h在WINCC项目文件夹\Library),这样其它全局动作和画面脚本都可以使用该预定义。项目、标准函数如果要使用,在该项目、标准函数前包含#include "apdefap.h"头文件即可,避免重复定义。
要注意,项目函数包含的"apdefap.h"头文件在WINCC项目文件夹\Library;标准函数包含的"apdefap.h"头文件在WinCC 安装目录的\aplib。
WINCC C脚本遵循的是ASCI C标准,不同的C语言标准有不同的语法等标准,在使用时要注意。如要在项目脚本中包含外部标准的头文件,此头文件应该来自于ASCI C头文件库。否则会存在编译或运行错误。
| WINCC变量类型 | WINCC数据类型 | C数据类型 | 相关联的C函数 | | 有符号 16 位数 | SHORT | short int | GetTagSWord | | 无符号 16 位数 | WORD | unsigned short int | GetTagWord | | 有符号 32 位数 | LONG | int,long int | GetTagSDWord | | 无符号 32 位数 | DWORD | unsigned int, unsigned long int | GetTagDWord |
|