创建一个自定义函数。

想写一个自定义控制阀门的函数,要求如下:

 有一组阀门通用一个操作界面,要求点动开或关,开度模拟量输入。
 变量如下:驱动开fa1_on  地址Q 33.1  驱动关fa1_off地址Q 33.0  模拟量KD1
 要求:点击一组阀门其中任何一个阀门,就会弹出通用操作界面,界面的变量、画面名称等等和阀门一一对应,
 只要在鼠标按左键动作里产生类似这样的语句
 #include "apdefap.h"
 void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
 {
 SetSwitchOpen("fa1_on", "1号阀门开", lpszPictureName, "  ", 'n', 'Y', 0);

 }
 其中SwitchOpen就是要的自定义函数。
 望各位大侠赐教 !!
 

最佳答案

定义所有函数都可使用的全局 C 变量 
 隐藏订货号显示订货号订货号:
 6AV637..   WINCC SIMATIC HMI Software 
 6AV6371-2..   SIMATIC WinCC V7.0 
 6AV638..   WINCC SIMATIC HMI Software 2 
 6AV6381-2..   SIMATIC WinCC V7.0 
 6ES7650..   SIMATIC PCS 7 PC 
 6ES7658..   SIMATIC PCS7 SW-Packages (BLE, ES, OS)  
  
  
  
 问题:
 如何定义所有函数都可使用的全局 C 变量? 

 解答:
 请执行如下步骤:
 创建一个新项目函数,例如: 

 void dummy()
 {
 } 

 现在,如果在一个伪函数中创建一个变量,例如: 

 void dummy()
 {
 int a = 0;
 } 

 则只有该伪函数可使用该变量。 

 但是,如果要在整个 C 程序中都可使用该变量,则只需在该函数范围之外声明该变量,例如: 

 int a = 0;
 void dummy()
 {
 } 

 现在,(所有函数、动作、对象动作、项目函数、标准函数) 可在整个程序范围内在运行时使用该变量 a。
 例如,现在为了能够在对象上的动作中使用变量 a,则只需声明为外部变量。这表示会通知编译器,它不必自己创建该变量,而是在运行时的另一个点会创建它。变量 a 在计算机中仅是局部存在的。在一个多计算环境中,其它计算机不能识别该变量。这种情形下,只能借助于内部 WinCC 变量,将它们作为数据交换区。 

 实例:
 void OnPropertyChange(..........) {
  Extern int a;
  // 变量没有在栈中创建,而仅是声明
  
  
   
  // 在其他地方已被实例化.
  
  
  a += 1;
  // 因此不可在这里初始化。
  
 }
   
   
  

 
 如果现在访问该变量,则公共变量 a 在整个程序范围内被改变。
 如果在项目函数内声明变量,则该变量存在于整个项目中。
 如果在标准函数中声明该变量,则该变量存在于所有项目中。 

 注意事项: 

 一个函数及通过它定义的全局变量最大可用内存为 64 KB。 
 如果修改了全局 C 变量,则使用该 C 变量的所有函数 (项目函数、全局动作和画面中的对象动作) 都会被重新编译。 
 对项目函数和标准函数,可通过全局脚本编辑器的“Compile all functions”函数实现。为了能够一起处理画面中所有对象动作,可使用 WinCC 插件“PictureScriptRebuild”:  
 插件“PictureScriptRebuild”链接      
 有关该主题的信息可在 WinCC 信息系统中搜索术语“global tags”。 
 有关该主题的更多注意事项参见条目号 1405195。   
  
 http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&siteid=cseus&objid=71096
 上那儿去瞧瞧看看,很精彩!

提问者对于答案的评价:
谢谢!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc274098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午10:29
下一篇 2019年6月11日 上午10:29

相关推荐

  • 博途wincc rt professional 切换按钮如何设置

    博途wincc rt  professional 切换按钮如何设置,跟rt adv 的不一样, 最佳答案 WinCC&n…

    SIMATIC WinCC 2021年7月5日
  • 当变量A为1时如何通过WINCC给变量B置1

    我在全局脚本VB的动作里创建了一个动作,此动作的触发器选择的是时间周期。请教我的出发点对吗?请高手赐教 问题补充:两个变量分别为两套PLC的DB变量由同一套WINCC来做。我需要当…

    SIMATIC WinCC 2019年6月11日
  • 怎么设置WINCC的地址

    2个WINCC和一个S7-300通信,通过MPI连接。现在只能一个WINCC能读到S7-300。两个WINCC还是默认地址,想问问怎么设定地址,还有这个WINCC是设成单用户还是多…

    SIMATIC WinCC 2019年6月11日
  • WINCCEXPLORER打开立刻又关闭

    各位大虾: 我碰到一个奇怪的问题: 我将电脑上的WINCC V7.0卸载后,重新安装了WINCC V6.2 ,但是WINCCEXP…

    SIMATIC WinCC 2019年6月11日
  • 两个WinCC单用户监控同一个1500PLC冗余

    1.两个WinCC装在两台计算机上,分别以相同的程序单用户监控同一个1500PLC,达到像两个触摸屏一样的功能,是不是只要计算机IP地址不一样就能实现?另外这个算WINCC的冗余吗…

    SIMATIC WinCC 2021年7月5日
  • WinCC 不能显示数据

    小弟刚学WinCC 6.0,请各位帮忙,具体如下:1. 新建了一个工程2. 然后添加MPI的设备3. 添加一个Tag 为16位无符…

    SIMATIC WinCC 2019年6月11日
  • wincc监控定时器状态

    WINCC如何监控300PLC里面的定时器当前状态。在建立变量的时候,无法创建T型的二进制变量。由于用到的定时器较多,有100多个,不想一个一个的将它们转成M型的二进制变量。有没有…

    SIMATIC WinCC 2019年6月11日
  • 重新安装一个新的Wincc服务器

    现场有一个旧的服务器,经常出现问题,导致生产不能进行,只能找人修理,严重耽误生产,现在想买一个新的服务器,请问我需要有什么注意的吗?有三个问题:1、有三个客户机,客户机需要改动吗?…

    SIMATIC WinCC 2017年11月29日
  • wincc实现按按钮自动加1.1

    现在想通过wincc按钮实现,按下按钮,对应变量自动加1.1,写了如下C动作,但是,只能加1,不能加1.1,求高手解决。int n;n=GetTagWord("…

    SIMATIC WinCC 2021年7月5日
  • 关于WINCC之间的数据相互调用

    有个项目有五台工控机,客户要求相互之间能够调用监视各自的数据,开始考虑5台PLC用以太网联网,后来一算成本实在太高,于是我想采用如下办法,不知是否可行,请高手指教.在WINCC中组…

    SIMATIC WinCC 2019年6月11日