WINCC的项目函数调用问题 //共4个PLC外部变量,都是int型。当按钮按下时,将其中的2个移动到另外2个位置。 1、在项目函数中建立一个MOV函数: #pragma option(mbcs)
Void MOV(int a,int b,int a1,int b1)////////将a1、b1分别移动到a、b { int mm,nn;
mm=GetTagWord("a1"); nn=GetTagWord("b1");
SetTagWord("a",mm); SetTagWord("b",nn); } 2、在按钮按下的C脚本中编写程序 #include"apdefap.h" void OnLButtonDown(....)//将wendua,wendub分别移动到wenduA,wenduB { int wenduA,wenduB,wena,wendub;//这4个都是wincc的外部变量名。
MOV(wenduA,wenduB,wena,wendub);
} 3、在计算机的属性里,勾选了全局脚本运行系统。
两边都编译通过了,但是检测数据没MOV成功。 请问是哪儿的原因?是不是全局脚本还需要去设定一个什么定时或动作激活运行?还是赋值方式错误?有这方面的基础教材吗? 我这只是按钮动作的函数,不需要周期运行。
-----很明显温度是实数,不是word。费劲巴拉的,直接用vbs: hmiruntime.tags("wenduA").write hmiruntime.tags("wendua").read hmiruntime.tags("wenduB").write hmiruntime.tags("wendub").read 两句话搞定了。-
-------楼主C语言基础咋样?参数传递错的一塌糊涂。---
------真细心!赞! 不过,我这只是举例。 在我实际的编程里,变量又长又丑,加上还是3个传给3个,怕大家看起来吃力。所以,我这里就简化了下,方便大家查看。 感觉是楼下的说的参数传递的问题,是吗?
--------确实是整数。 只要能用,倒是不怕麻烦的。 您说的VBS,唉,我还没使用过。还是用C吧,不怕麻烦。
---------刚学的wincc,确实只是新手。
给我具体讲讲吧?倒腾了大半天了,还没成功。
------------我这个赋值参数有大概一千个,一个个地赋值就有大概一千行,代码都超限了。 所以,想设计个函数,一行就可以赋值几个,比如3个,那样代码就不超限了。 我这样建立项目函数的过程是对的吗?
---------主要看变量名,如果是有规律的,用循环语句;如果没规律,用数组,再用循环。 就是先将乱七八糟的变量名,用数组存起来。
------你读写的变量多了,一个个的读写,你的电脑就要累死了! c用SetTagMultiWait和GetTagMultiWait vbs就用组。
-------我还是想把这个项目函数的问题解决掉,换了个思路,将外部变量名称直接传给函数,但是脚本里却出现编译错误,这是哪儿错了?
我定义了一个项目函数,这个函数就是专门用来mov的,将三个变量mov到另外三个变量中。
看提示呀!数据类型不匹配!
--------看提示呀!数据类型不匹配!
------能应该怎么修改呢? 着急解决这个问题哦~~多谢了
------项目函数编译保存了没有,另外形参代入不能用引号,用了引号就不是变量而是字符串常量了
---------我就是把这些变量名称作为字符串,传给函数去处理的。 重新定义了下,脚本和函数都编译没错误,但是结果还是没有。 应该怎么做呢?
--------调用的地方,之前你直接传入字符串是对的,后面定义为变量,但你并没给变量赋值,所以不对。 项目函数里引用变量不能带引号。
--------将项目函数里的所有的双引号去掉。 成功~~~ 谢谢您们的指导!这是我学习使用西门子的根本。
|