抖音粉丝群1
『7x24小时有问必答』

WINCC C脚本是大家在组态项目时经常用到的功能,但在使用过程中有这样那样的疑惑或问题,此文总结一些内容,以供学习交流。

主要内容:
1、脚本全局C变量
2、脚本中调用外部DLL

1脚本全局C变量
1.全局 C 变量的定义:

WINCC C脚本的全局变量,在自定义的任意项目、标准函数外定义。如下图,在add项目函数前定义的int a变量为全局变量,此变量在WINCC运行后由系统创建,即使函数本身未被调用,且为运行系统中的每一个函数和动作所知。且通常可被画面中的脚本访问。

640.jpg
注意:
WINCC处于运行状态时,如果重新编译函数并保存,定义在该函数前的全局变量将被初始化。但其不受重新生成头文件的影响。

2.全局 C 变量的使用:

通过在函数或动作内使用说明符extern将变量声明为外部变量,即可将全局 C 变量用在函数或动作中。

640.jpg
而对于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>(...);
#pragma code()
<Type of returned value> <Function_name 1>(...)对要调用的DLL中函数进行声明。此DLL 要放在WINCC的“\bin”目录中,或保存在“PATH”系统环境变量中所定义的路径中。
#pragma code的预处理命令和定义全局变量不同,如下图在add函数前预定义的动态链接kernel32.dll,只对add函数有用。
640.jpg

对于全局动作和画面脚本,无法在函数外部输入代码,所以预处理命令都在内部

640.jpg

对于全局动作和画面脚本,默认包含#include "apdefap.h"头文件,所以也可以把预处理命令写在apdefap.h头文件里(apdefap.h在WINCC项目文件夹\Library),这样其它全局动作和画面脚本都可以使用该预定义。项目、标准函数如果要使用,在该项目、标准函数前包含#include "apdefap.h"头文件即可,避免重复定义。


要注意,项目函数包含的"apdefap.h"头文件在WINCC项目文件夹\Library;标准函数包含的"apdefap.h"头文件在WinCC 安装目录的\aplib

640.jpg

说明:
WINCC C脚本遵循的是ASCI C标准,不同的C语言标准有不同的语法等标准,在使用时要注意。如要在项目脚本中包含外部标准的头文件,此头文件应该来自于ASCI C头文件库。否则会存在编译或运行错误。

附:
部分WINCC变量与C变量对应关系
WINCC变量类型WINCC数据类型C数据类型相关联的C函数
有符号 16 位数SHORTshort intGetTagSWord
无符号 16 位数WORDunsigned short intGetTagWord
有符号 32 位数LONGint,long intGetTagSDWord
无符号 32 位数DWORDunsigned int, unsigned long intGetTagDWord

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码