创建一个自定义函数。

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

 有一组阀门通用一个操作界面,要求点动开或关,开度模拟量输入。
 变量如下:驱动开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

相关推荐

  • 怎样修改WINCC6.0历史曲线

    1、因工作需要,需把某个变量以前的历史曲线永久删除,从今天开始显示历史曲线?望高手赐教?怎样实现?有具体步骤更好 最佳答案 1、利用项目复制器,新复制一个项目,然后打开新项目就行,…

    SIMATIC WinCC 2017年6月1日
  • wincc窗口如何设置材料名称

    通过wincc的窗口显示材料名称,数量在2000个左右,需要建立一个数据库的东西,通过什么方式,使用什么软件和方法可以实现,连接方式:wincc -pcaccess-&n…

    SIMATIC WinCC 2019年6月11日
  • wincc flexible 子窗口

    各位大侠:    小弟手里有一块TP277,怎么在画面中调用子窗口啊?这款屏有个功能码?谢谢…… 最佳答案 画面中调用子窗口?没有此功能,你…

    SIMATIC WinCC 2021年7月5日
  • wincc脚本实现报警过滤

    写脚本过滤报警,试着用过MsgFilterSQL,但是报警编号不连续,所以MSGNR语句不好使,请问有没有其他什么方法对报警进行过滤,比如通过搜索含相同文本的消息,设置不同优先级等…

    SIMATIC WinCC 2019年6月11日
  • wincc中怎样用vbs脚本创建txt文档?并写入一句话?

    自己参照网上的帖子写了一段程序,没有报错,但是要写入的txt文档中没有找到我要写入的字符串,大家帮忙看一下哪块出问题了?Sub OnClick(ByVal It…

    SIMATIC WinCC 2019年6月11日
  • 安装WINCC6.2SP3问题

    求助~安装多次出现问题本人配置为 WINXP SP2版本系统+step7 5.4+wincc 6.2sp3 asia +…

    SIMATIC WinCC 2019年6月11日
  • SIMATIC WINCC如何用动态对话框组态按钮实现画面切换

    现场新加了一套控制系统,组态wincc画面时,看前人定义了一个’qh’变量,用动态对话框组态了一个按钮,按下左键给变量复制,和表达式相等就可以切换画面。各位前辈可以教教我具体怎么操…

    2020年11月1日
  • WINCC6.0与GE的PLCOPC通信

    WINCC6.0与GE的PLC进行OPC通信,需要哪些硬件配置?又有哪几个步骤呢? 问题补充:PS:我说的硬件是包括软件和硬件,需要哪些基本内容。 另WINCC和300的…

    SIMATIC WinCC 2019年6月11日
  • WINCC 编程问题,IO域的变量链接。

    监控多个系统数据(20个系统),每个系统监控的内容都一样,现在的做法是:先做一个系统的监控画面,拷贝19个画面,对每一个画面做变量链接,(一个系统大约有20到30个需要监控的变量)…

    SIMATIC WinCC 2018年12月2日
  • wincc flecible中的按钮

    我需要再wincc flecible中某个画面设置1个按钮,点击该按钮后要弹出个对话框。对话框的尺寸不能有整个画面那么大,最好是可以自己调节尺寸。在对话框里我还要设置些按…

    SIMATIC WinCC 2017年11月12日